2016-11-10 97 views
4

我有PostgreSQL/PostGIS數據庫,我想將我的數據表從數據庫轉換爲GeoJSON格式。如何將PostGIS數據庫中的數據轉換爲Java中的GeoJSON

我的目的是使用這個GeoJSON創建一個JavaScript的地圖。我在Spring MVC中使用Java和JDBC。轉換數據的最佳方式是什麼?

+1

您可以在Postgis中創建Geojson。請參閱http://postgis.net/docs/ST_AsGeoJSON.html。或http://gis.stackexchange.com/questions/142391/store-a-geojson-featurecollection-to-postgres-with-postgis – mlinth

回答

4

這可以在將數據拉出數據庫的查詢中完成。您可以使用postgis功能ST_AsGeoJSON()。這是一個鏈接到它的文檔。

http://postgis.org/docs/ST_AsGeoJSON.html

有一點要注意的是,ST_AsGeoJSON()結果只返回數據的幾何部分。如果您需要獲取geojson功能,那麼您將不得不創建特徵對象並向其添加幾何圖形。

使用ST_AsGeoJSON()時,您應該期待的結果示例爲{"type": "Point", "coordinates": [12, 15]}

如果您想從幾何對象中創建一個特徵,那看起來就像{"type": "Feature", "properties": {}, "geometry": {"type": "Point", "coordinates": [12, 15]}}

0

ogr2ogr是你的朋友。史蒂夫貝內特得到具有自定義屬性/列選擇here一個很好的例子,沿着此線:

ogr2ogr -f以GeoJSON out.json 「PG:主機=本地主機DBNAME = mydb的用戶=爲myuser 密碼= mypw」 -sql「SELECT column1,column2,column3 FROM mytable」

0

最明顯的答案是使用ST_AsGeoJSON將幾何轉換爲數據庫中的字符串。然而,這會將一些應用程序邏輯推入數據庫,可能更重要的是,它會通過網絡傳輸更多的數據,因爲GeoJSON文本表示比Postgres使用的擴展的已知二進制文件(EWKB)要小得多。這也意味着您無法在您的MVC控制器中使用幾何體進行任何有用的操作,而無需將其反序列化回JTS幾何體。

更豐富且可能更快(如果涉及到網絡),解決方案是爲您的JPA提供程序使用空間擴展(例如,Hibernate在第5版中支持此開箱即用,並且在第4版中使用了Hibernate-Spatial)將幾何體作爲JTS(或類似的)幾何體直接拖入實體中。大多數實現將使用WKB(已知二進制)作爲緊密表示,然後將其反序列化爲適當的Java類型,而不是將每個64位(8字節)二進制轉換爲一個巨大的結構!與Hibernate一個可以做以下(按要求SRID和幾何類型等調整定義):

@Column(columnDefinition = "geometry(MultiPolygon,4326)") 
private Geometry geom; 

然後告訴您正在使用在application.properties的PostGIS的方言(或其他配置源)春節:

spring.jpa.database-platform=org.hibernate.spatial.dialect.postgis.PostgisDialect 

您的Spring數據存儲庫現在將返回具有幾何的實體(也可以在存儲庫接口方法上編寫JPQL查詢以支持空間查詢,例如邊界框相交等)。

<dependency> 
    <groupId>com.bedatadriven</groupId> 
    <artifactId>jackson-datatype-jts</artifactId> 
    <version>2.2</version> 
</dependency> 

,然後將其添加到:

了具有通過包括爲JTS類型在構建器,如https://github.com/bedatadriven/jackson-datatype-jts得到了與填充的幾何實體可以與傑克遜在你的終端很容易地將它轉換爲以GeoJSON傑克遜ObjectMappers由Spring在應用程序中配置類的一個創造一個合適的bean創建,如:

@Bean 
    public Jackson2ObjectMapperBuilder objectMapperBuilder() { 
      Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder(); 
      builder.modulesToInstall(new JtsModule()); 
      return builder; 
    } 

您可能需要傑克遜的比這其他的東西更多的配置(空處理,縮進等),但這是一個好的開始。

現在,當您從Spring MVC控制器返回對象的JTS幾何體時,它們將自動轉換爲GeoJSON幾何體。如果您想使用這些結構,您必須複製GeoJSON Feature/FeatureCollection結構作爲類,或者將可以輕鬆映射到JavaScript的某些內容(例如您的實體)返回到這種結構中。

相關問題