如何使用 Hibernate 在 PostGIS 中将 geojson(在 javascript 中)保存到几何(MultiPolygon,4326)

Posted

技术标签:

【中文标题】如何使用 Hibernate 在 PostGIS 中将 geojson(在 javascript 中)保存到几何(MultiPolygon,4326)【英文标题】:how to save geojson(in javascript) to geometry(MultiPolygon,4326) in PostGIS with Hibernate 【发布时间】: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 的回复,我试试这个。但是您如何看待将这个几何结构传递给数据库? 【参考方案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。我认为这就是您正在寻找的(我尚未对其进行测试,但看起来不错)。

祝你好运!

【讨论】:

以上是关于如何使用 Hibernate 在 PostGIS 中将 geojson(在 javascript 中)保存到几何(MultiPolygon,4326)的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate Spatial PostGIS 1.1.1 映射到视图而不是表

如何在 Postgres/Postgis 中转换类型(并使用 sequelizejs)

如何使用突变在graphql中使用postgis的点类型坐标信息?

JPA/Hibernate 本机查询无法识别参数

如何将 postgis 对象和函数定义加载到单独的模式中?

如何使用 PostGIS 升级 PostgreSQL?