【问题标题】:how to save geojson(in javascript) to geometry(MultiPolygon,4326) in PostGIS with Hibernate如何使用 Hibernate 在 PostGIS 中将 geojson(在 javascript 中)保存到几何(MultiPolygon,4326)
【发布时间】:2015-05-18 17:28:02
【问题描述】:

我正在开发一个 jsf 项目(2.2 版)。我在 javascript 中有一个 geoJson 对象。另一方面,我在 PostGIS 中有一个几何类型的列(MultiPolygon,4326)。我正在使用 Hibernate 4.3.8 和 Postgresql 9.3。

模型类中的几何列定义

@Type(type="org.hibernate.spatial.GeometryType")
@Column(name="geom")
private Polygon geom;

我还在我的项目中包含了 Hibernate Spatial 4.x,我可以访问托管 bean 中的 geojson 字符串。但我不知道如何将这个 geojson 插入我的数据库。可能我必须解析geojson并从geojson坐标创建多边形对象并传递给我的数据库。但我没有成功。这样做的方法是什么?

提前致谢。

【问题讨论】:

  • 您可以使用ST_GeomFromGeoJSON 将 GeoJSON 字符串读取为几何图形。
  • 感谢 Mike 的回复,我试试这个。但是您如何看待将这个几何结构传递给数据库?

标签: hibernate gis postgis jsf-2.2 hibernate-spatial


【解决方案1】:

可能我必须解析 geojson 并从 geojson 坐标创建多边形对象。

您不必这样做,数据库可以为您完成,而且很有可能它会比您更快。只需从 GeoJSON 创建一个 Geometry。在您的数据库中使用以下函数:

geometry ST_GeomFromGeoJSON(text geomjson);

这会产生一个 EWKB-Geometry,可以保存在数据库中、重新投影、重新格式化等。参数是字符串形式的 GeoJSON。

我不知道如何用 hibernate-spatial 触发这个 Database-Function,但应该有一个直接执行 sql-queries 的功能。不过要小心,这可能会导致 SQL 注入错误。

P.S.:我根本不建议在空间应用程序的上下文中使用 Object-Relational-Mappers,因为这样的不可访问性。

【讨论】:

    【解决方案2】:

    您不会需要对该字段进行数据库处理,所以为什么不直接将数据库保存为字符串/BLOB。

    【讨论】:

    • 感谢@Paul 的回复。我不应该将它保存为 String/BLOB,因为我在另一端有一个 wms 服务器,我想与它共享我的几何图形。如果我将几何保存为字符串,wms 服务器不能像 geom 值一样接受它。
    【解决方案3】:

    看看geojson-jackson project。我认为这就是您正在寻找的(我尚未对其进行测试,但看起来不错)。

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2019-11-04
      • 2015-07-27
      • 2014-02-08
      • 1970-01-01
      • 2014-05-28
      • 1970-01-01
      • 2021-05-04
      • 2013-01-09
      • 1970-01-01
      相关资源
      最近更新 更多