- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在我的 PostgreSQL 9.3 + PostGIS 2.1.5 中,我有一个表 PLACE
,其中有一列 coordinates
类型为 Geometry(Point,26910)
.
我想将它映射到我的 Spring Boot 1.1.9 Web 应用程序中的 Place
实体,该应用程序使用 Hibernate 4.0.0 + 。 Place
可用于 REST 存储库。
不幸的是,当我 GET http://localhost:8080/mywebapp/places
我收到 这个奇怪的 JSON 响应:
{
"_embedded" : {
"venues" : [ {
"id" : 1,
"coordinates" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
"envelope" : {
等等不确定...! Spring 日志没有帮助..
我正在使用这个 application.properties:
spring.jpa.database-platform=org.hibernate.spatial.dialect.postgis.PostgisDialect
spring.jpa.show-sql=false
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:postgresql://192.168.1.123/mywebapp
spring.datasource.username=postgres
spring.datasource.password=mypwd
spring.datasource.driverClassName=org.postgresql.Driver
首先,用database-platform
代替database
可以吗?也许我必须使用以下设置而不是上述设置?
spring.datasource.url=jdbc:postgresql_postGIS://192.168.1.123/mywebapp
spring.datasource.driverClassName=org.postgis.DriverWrapper
反正我的实体是这样的:
@Entity
public class Place {
@Id
public int id;
@Column(columnDefinition="Geometry")
@Type(type="org.hibernate.spatial.GeometryType") //"org.hibernatespatial.GeometryUserType" seems to be for older versions of Hibernate Spatial
public com.vividsolutions.jts.geom.Point coordinates;
}
我的 pom.xml 包含这个相关部分:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.3-1102-jdbc41</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-spatial</artifactId>
<version>4.3</version><!-- compatible with Hibernate 4.3.x -->
<exclusions>
<exclusion>
<artifactId>postgresql</artifactId>
<groupId>postgresql</groupId>
</exclusion>
</exclusions>
</dependency>
有点奇怪的配置,我在网上找到的,目前最好用的一个。
我希望有人能帮助我解开这个谜团。 :)
最佳答案
最后我发现我的配置没问题,可能是 Jackson 无法正确管理 Point
数据类型。于是我定制了它的JSON序列化和反序列化:
将这些注释添加到我们的 coordinates
字段:
@JsonSerialize(using = PointToJsonSerializer.class)
@JsonDeserialize(using = JsonToPointDeserializer.class)
创建这样的序列化器:
import java.io.IOException;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.vividsolutions.jts.geom.Point;
public class PointToJsonSerializer extends JsonSerializer<Point> {
@Override
public void serialize(Point value, JsonGenerator jgen,
SerializerProvider provider) throws IOException,
JsonProcessingException {
String jsonValue = "null";
try
{
if(value != null) {
double lat = value.getY();
double lon = value.getX();
jsonValue = String.format("POINT (%s %s)", lat, lon);
}
}
catch(Exception e) {}
jgen.writeString(jsonValue);
}
}
创建这样的反序列化器:
import java.io.IOException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.Point;
import com.vividsolutions.jts.geom.PrecisionModel;
public class JsonToPointDeserializer extends JsonDeserializer<Point> {
private final static GeometryFactory geometryFactory = new GeometryFactory(new PrecisionModel(), 26910);
@Override
public Point deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
try {
String text = jp.getText();
if(text == null || text.length() <= 0)
return null;
String[] coordinates = text.replaceFirst("POINT ?\\(", "").replaceFirst("\\)", "").split(" ");
double lat = Double.parseDouble(coordinates[0]);
double lon = Double.parseDouble(coordinates[1]);
Point point = geometryFactory.createPoint(new Coordinate(lat, lon));
return point;
}
catch(Exception e){
return null;
}
}
}
也许你也可以使用this serializer和 this deserializer , 可用 here .
关于spring - 在 Spring Boot 上使用 Hibernate 映射 PostGIS 几何点字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27624940/
是否可以在使用 PHP 实现 API 后存储从网站 (Nestoria) 收集的数据?我可以使用 PHP 提取数据并将结果显示在网络浏览器上,但我需要将它们转储或保存到我的 PostGIS 数据库中。
我正在尝试清理 PostGIS 数据库中的一些地理空间数据。由于地理编码过程中的一些不精确性,一些必须落在特定区域边界内的点被映射到非常接近,但在该区域的定界多边形之外。 我的第一个方法是使用 Pos
我得到一列( latlon ),它是 ST_MultiPolygon . 另一个几何体是一个点,我只想检查它是否在我的 MultiPolygons 内。 我试过: SELECT ST_CONTAINS
我正在使用似乎过于分散而无法有效查询的 radio map 。当我询问一个点是否在多边形内时,响应时间为 20-40 秒(我已经测试了“内”/“包含”/“重叠”)。我使用 PostGIS 和 GeoD
所以我加载了一堆 NHD 数据,几何图形最终变成了 MultiPolygonZM(其他表格的 pointZM 和 areaZM) way geometry(MultiPolygonZM,90091
我需要 PostGIS 中地理数据中心的经度和纬度。格式称为 EPSG 2206,记录中的列是“length”、“shape_area”和“the_geom” 最佳答案 我使用查询来获取经度和纬度。
我正在将 GeoDjango 与 PostGIS 结合使用,并尝试使用多边形从数据库中获取属于其中的记录。 如果我定义一个大于地球面积一半的多边形,则假定多边形的“内部”是我打算作为“外部”的较小区域
我正在使用 ubuntu 12.04,我安装了 postgis2.1 和 postgresql9.1 ......我是所有人的新手!...... 我按照这个教程创建了一个模板数据库:http://li
我正在尝试将一系列线串几何图形与匹配属性(road_name_search 和 road_id)结合起来,然后将合并的线串从以下示例数据连接回 road_id 属性 http://sqlfiddle.
我计划将 GeoServer 与 PostGIS 数据库结合使用,以通过 Web map 服务提供等高线。 我有一个简单的经纬度值网格,我想将其存储在数据库中并绘制轮廓。虽然 GeoServer 用户
我正在尝试启动 GeoDjango 应用程序。我已经在 Lion 上使用 brew 安装了 Postgres 和 PostGIS。我使用 template_postgis 创建了一个数据库:creat
我正在尝试在 Ubuntu Server 12.04 上设置一个 tile 服务器,并且我已经安装了 Postgresql 和 PostGis 以及 Mapnik 和 Osm2pgsql。我正在尝试运
我正在迁移一个项目的连接模式从:使用DriverManager到DataDource。但我收到了这个错误: org.postgis.PGgeometry cannot be cast to org.p
我关注了这个tutorial on the Open shift site .我现在正在尝试添加自己的数据,但运气不佳。我在本地计算机上有一个由 PGAdmin III 管理的 postGIS 数据库
我在通过 geoservers wfs 将 ol3 中的功能发布到 postgis db 时遇到问题。当我运行此代码时,我只能插入 gid(pk) 和 bin 列,但_geom(Geometry) 列
我已经成功设置了一个用于 OSM-Bright 的 postgis 服务器。我必须承认服务器对我来说有点像黑盒子,所以虽然我已经设置好它并且运行良好,但我不知道如何以最佳方式使用它。 在 OSM-Br
我想从 Java 查询 PostGIS/PostgreSQL 数据库。 已安装 PostgreSQL 9.4。 PostGIS 2.1 Bundle for PostgreSQL 9.4 通过 Sta
从 PostGIS 2.1 升级:“错误:尝试重新定义参数“postgis.backend” 我正在尝试升级 AWS RDS 上的 PostGIS 数据库,但在运行 ALTER EXTENSION p
我尝试使用 pgAdmin 4 在 Postgresql 11 上运行 postgis 扩展,但在尝试创建扩展时出现以下错误: Could not access file "$libdir/postg
今天当我尝试从包含几何值的列中进行选择时,我随机开始出现此错误 错误:无法访问文件“$libdir/postgis-2.0” 我的选择之前一直运行良好,但今天才开始出现这种情况。有关如何解决此问题的任
我是一名优秀的程序员,十分优秀!