Popularity
2.7
Growing
Activity
0.0
Stable
31
1
5

Programming language: Go
Tags: Geographic    

gismanager alternatives and similar packages

Based on the "Geographic" category

Do you think we are missing an alternative of gismanager or a related project?

Add another 'Geographic' Package

README

Go Report Card GitHub license GitHub issues Coverage Status Build Status Documentation GitHub forks GitHub stars Twitter

GISManager

Publish Your GIS Data(Vector Data) to PostGIS and Geoserver

  • How to install:
    • go get -v github.com/hishamkaram/gismanager
  • Usage:

    • testdata folder content: ./testdata/ ├── neighborhood_names_gis.geojson ├── nested │   └── nyc_wi-fi_hotspot_locations.geojson ├── sample.gpkg
    • 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(), }
    • get Supported GIS Files: files, _ := gismanager.GetGISFiles(manager.Source.Path) for _, file := range files { fmt.Println(file) }
    • output: <full_path>/testdata/neighborhood_names_gis.geojson <full_path>/testdata/nested/nyc_wi-fi_hotspot_locations.geojson <full_path>/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"
        }]
      }
    }
    
    ---
    

Todo:

  • [ ] backup postgis as geopackage


*Note that all licence references and agreements mentioned in the gismanager README section above are relevant to that project's source code only.