diff --git a/README.md b/README.md index 0d942bc..26b11f1 100644 --- a/README.md +++ b/README.md @@ -9,9 +9,6 @@ [![Twitter](https://img.shields.io/twitter/url/https/github.com/hishamkaram/gismanager/edit/master/README.md.svg?style=social)](https://twitter.com/intent/tweet?text=Wow:&url=https%3A%2F%2Fgithub.com%2Fhishamkaram%2Fgeoserver%2Fedit%2Fmaster%2FREADME.md) - - -

@@ -21,3 +18,169 @@ # GISManager Publish Your GIS Data(Vector Data) to PostGIS and Geoserver + +- How to install: + - `go get -v github.com/hishamkaram/gismanager` +- Usage: + - create `ManagerConfig` instance: + ``` + manager:= gismanager.ManagerConfig{ + Geoserver: gismanager.GeoserverConfig{WorkspaceName: "golang", Username: "admin", Password: "geoserver", ServerURL: "http://localhost:8080/geoserver"}, + Datastore: gismanager.DatastoreConfig{Host: "localhost", Port: 5432, DBName: "gis", DBUser: "golang", DBPass: "golang", Name: "gismanager_data"}, + Source: gismanager.SourceConfig{Path: "./testdata"}, + logger: gismanager.GetLogger(), + } + ``` + - `testdata` folder content: + ``` + ./testdata/ + ├── neighborhood_names_gis.geojson + ├── nested + │   └── nyc_wi-fi_hotspot_locations.geojson + ├── sample.gpkg + ``` + - get Supported GIS Files: + ``` + files, _ := gismanager.GetGISFiles(manager.Source.Path) + for _, file := range files { + fmt.Println(file) + } + ``` + - output: + ``` + /testdata/neighborhood_names_gis.geojson + /testdata/nested/nyc_wi-fi_hotspot_locations.geojson + /testdata/sample.gpkg + ``` + - read files and get layers Schema: + ``` + for _, file := range files { + source, ok := manager.OpenSource(file, 0) + if ok { + for index := 0; index < source.LayerCount(); index++ { + layer := source.LayerByIndex(index) + gLayer := gismanager.GdalLayer{ + Layer: &layer, + } + fmt.Println(layer.Name()) + for _, f := range gLayer.GetLayerSchema() { + fmt.Printf("\n%+v\n", *f) + } + } + } + } + ``` + - output sample: + ``` + neighborhood_names_gis + + {Name:geom Type:POINT} + + {Name:stacked Type:String} + + {Name:name Type:String} + + {Name:annoline1 Type:String} + + {Name:annoline3 Type:String} + + {Name:objectid Type:String} + + {Name:annoangle Type:String} + + {Name:annoline2 Type:String} + + {Name:borough Type:String} + ... + ``` + - add your gis data to your database: + ``` + for _, file := range files { + source, ok := manager.OpenSource(file, 0) + targetSource, targetOK := manager.OpenSource(manager.Datastore.BuildConnectionString(), 1) + if ok && targetOK { + for index := 0; index < source.LayerCount(); index++ { + layer := source.LayerByIndex(index) + gLayer := gismanager.GdalLayer{ + Layer: &layer, + } + newLayer, postgisErr := gLayer.LayerToPostgis(targetSource, manager, true) + if postgisErr != nil { + panic(postgisErr) + } + logger.Infof("Layer: %s added to you database", newLayer.Name()) + } + } + } + ``` + - output: + ``` + INFO[14-10-2018 17:28:37] Layer: neighborhood_names_gis added to you database + INFO[14-10-2018 17:28:38] Layer: nyc_wi_fi_hotspot_locations added to you database + INFO[14-10-2018 17:28:38] Layer: hwy_patrol added to you database + ``` + - update the previous code to publish your postgis layers to geoserver + ``` + for _, file := range files { + source, ok := manager.OpenSource(file, 0) + targetSource, targetOK := manager.OpenSource(manager.Datastore.BuildConnectionString(), 1) + if ok && targetOK { + for index := 0; index < source.LayerCount(); index++ { + layer := source.LayerByIndex(index) + gLayer := gismanager.GdalLayer{ + Layer: &layer, + } + if newLayer, postgisErr := gLayer.LayerToPostgis(targetSource, manager, true); newLayer.Layer != nil || postgisErr != nil { + ok, pubErr := manager.PublishGeoserverLayer(newLayer) + if pubErr != nil { + logger.Error(pubErr) + } + if !ok { + logger.Error("Failed to Publish") + } else { + logger.Info("published") + } + } + + } + } + } + ``` + - output: + ``` + INFO[14-10-2018 17:37:07] url:http://localhost:8080/geoserver/rest/workspaces/golang Status=404 + ERRO[14-10-2018 17:37:07] No such workspace: 'golang' found + INFO[14-10-2018 17:37:07] url:http://localhost:8080/geoserver/rest/workspaces Status=201 + INFO[14-10-2018 17:37:07] url:http://localhost:8080/geoserver/rest/workspaces/golang/datastores/gis?quietOnNotFound=true Status=404 + INFO[14-10-2018 17:37:07] url:http://localhost:8080/geoserver/rest/workspaces/golang/datastores Status=201 + ERRO[14-10-2018 17:37:07] {"featureType":{"name":"neighborhood_names_gis","nativeName":"neighborhood_names_gis"}} + INFO[14-10-2018 17:37:07] url:http://localhost:8080/geoserver/rest/workspaces/golang/datastores/gis/featuretypes Status=201 + INFO[14-10-2018 17:37:07] published + INFO[14-10-2018 17:37:08] url:http://localhost:8080/geoserver/rest/workspaces/golang Status=200 + INFO[14-10-2018 17:37:08] url:http://localhost:8080/geoserver/rest/workspaces/golang/datastores/gis?quietOnNotFound=true Status=200 + ERRO[14-10-2018 17:37:08] {"featureType":{"name":"nyc_wi_fi_hotspot_locations","nativeName":"nyc_wi_fi_hotspot_locations"}} + INFO[14-10-2018 17:37:08] url:http://localhost:8080/geoserver/rest/workspaces/golang/datastores/gis/featuretypes Status=201 + INFO[14-10-2018 17:37:08] published + INFO[14-10-2018 17:37:08] url:http://localhost:8080/geoserver/rest/workspaces/golang Status=200 + INFO[14-10-2018 17:37:08] url:http://localhost:8080/geoserver/rest/workspaces/golang/datastores/gis?quietOnNotFound=true Status=200 + ERRO[14-10-2018 17:37:08] {"featureType":{"name":"hwy_patrol","nativeName":"hwy_patrol"}} + INFO[14-10-2018 17:37:08] url:http://localhost:8080/geoserver/rest/workspaces/golang/datastores/gis/featuretypes Status=201 + INFO[14-10-2018 17:37:08] published + ``` + - done check you geoserver or via geoserver rest api url http://localhost:8080/geoserver/rest/layers.json : + ``` + { + "layers": { + "layer": [..., { + "name": "golang:hwy_patrol", + "href": "http:\/\/localhost:8080\/geoserver\/rest\/layers\/golang%3Ahwy_patrol.json" + }, { + "name": "golang:neighborhood_names_gis", + "href": "http:\/\/localhost:8080\/geoserver\/rest\/layers\/golang%3Aneighborhood_names_gis.json" + }, { + "name": "golang:nyc_wi_fi_hotspot_locations", + "href": "http:\/\/localhost:8080\/geoserver\/rest\/layers\/golang%3Anyc_wi_fi_hotspot_locations.json" + }] + } + } + ```