在上一篇文章利用hibernate-spatial让Spring Data JPA支持空间数据,我们使用hibernate spatial
,spring data jpa
成功支持空间字段的映射与增删查改。但是我们目前面临的问题是客户端传过来的json数据如何转换为Geometry(Point、LineString),后台的Geometry如何直接转换为JSON。在GIS的世界里有一个标准的GIS JSON格式叫做geojson
。在本文将使用geojson
格式与Geometry对象互相转换。 这里我们的思路是Spring Boot为我们自动注册了MappingJackson2HttpMessageConverter
,在org.springframework.boot.autoconfigure.web.JacksonHttpMessageConvertersConfiguration
如:
@Bean
@ConditionalOnMissingBean(value = MappingJackson2HttpMessageConverter.class, ignoredType = {
"org.springframework.hateoas.mvc.TypeConstrainedMappingJackson2HttpMessageConverter",
"org.springframework.data.rest.webmvc.alps.AlpsJsonHttpMessageConverter" })
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(
ObjectMapper objectMapper) {
return new MappingJackson2HttpMessageConverter(objectMapper);
}
据此看出Spring Boot是使用当前的Message Converter来实现对象(Geometry)和json之间转换的,我们只需要自定义objectMapper让其支持geojson即可。
添加第三方的依赖:
<dependency>
<groupId>com.bedatadriven</groupId>
<artifactId>jackson-datatype-jts</artifactId>
<version>2.4</version>
</dependency>
<repositories>
<repository>
<id>sonatype-oss</id>
<url>https://oss.sonatype.org/content/groups/public</url>
</repository>
</repositories>
自定义object让其支持Geometry与geojson之间的准换:
@Bean
public ObjectMapper objectMapper(){
ObjectMapper objectMapper = new ObjectMapper();
objectMapper().registerModule(new JtsModule());
return objectMapper;
}
这个第三方依赖目前有个bug就是不支持空间坐标系,在一个单一的系统里一般情况下坐标系应该也是一定的,所以不支持问题也不大,所以我们将前面例子的字段映射修改为,:
//@Column(columnDefinition = "geometry(Point,4326)")
@Column(columnDefinition = "geometry(Point)")
private Point point;
测试控制器:
@RestController
@Slf4j
@RequestMapping("/cities")
public class CityController {
@Autowired
CityRepository cityRepository;
@PostMapping
public City testIn(@RequestBody City city){
log.info(city.getPoint().getSRID()
+ "/" + city.getPoint().getX()
+ "/" +city.getPoint().getY());
return cityRepository.save(city);
}
}
测试数据,使用request body向后台POST
如下结果:
{
"name": "南京",
"point": {
"type": "Point",
"coordinates": [
110.4,
20.1
]
}
}
返回值为:
{
"id": 58,
"name": "南京",
"point": {
"type": "Point",
"coordinates": [
110.4,
20.1
]
}
}
这时我们实现了自动的Geometry和geojson数据的转换。
源码地址:
http://www.wisely.top/2017/06/28/spring-boot-mvc-geometry-geojson/
相关推荐
geojson-geometry-shp,在java中,需要三种格式数据的转化,通过pdf文件总结到一起,方便进行开发。
投影变换、数据格式转换、数据裁切、拼接等内容分别简单介绍
Oracle数据库对sdo_geometry空间坐标进行转换
获取任意 GeoJSON 对象并将其转换为 Geometry 或 GeometryCollection 参数 范围 类型 描述 geojson 特征,几何,特征集合,几何集合 要转换的 geojson 例子 var poly = { "type" : "Feature" , "properties" : { ...
GeoJSON是一种对各种地理数据结构进行编码的格式,基于Javascript对象表示法(JavaScript Object Notation, 简称JSON)的地理空间信息数据交换格式。GeoJSON对象可以表示几何、特征或者特征集合。GeoJSON支持下面这几...
简单示例实现如何为Oracle中sdo_geometry字段创建空间索引
Geometry点选
arcgis-to-geojson-utils, 将ArcGIS几何图形转换为GeoJSON几何图形的工具,反之亦然 arcgis-to-geojson-utils 将ArcGIS几何图形转换为GeoJSON几何图形的工具,反之亦然。安装npm install @esri/arcgis-to-geojson-...
纽约市行政区地图Geojson 可用esri geometry api进行解析 空间分析
Three.js渲染GeoJSON
将有效的GeoJSON多边形转换为线串 草皮多边形到线串模块 turf.polyToLineString(polygon) 采用GeoJSON Polygon功能并将其作为GeoJSON线串返回。 参数 范围 类型 描述 polygon 多边形 GeoJSON多边形 例子 var ...
向WebLogic添加空间字段sdo_geometry的支持
import { GeoJsonGeometry } from 'three-geojson-geometry'; 或者 const { GeoJsonGeometry } = require('three-geojson-geometry'); 甚至 [removed][removed] 然后 const myLine = new THREE.Line( new THREE....
一个用于将GeoJSON转换为表示形式的C ++ 14库。
postgis-geojson 用于PostGIS Geometry对象的GeoJSON Jackson序列化器和反序列化器。GeoJSON支持该库支持对GeoJSON规范中定义的所有序列化/反序列化。 下面给出了GeoJSON几何对象与PostGIS对象之间的关系: GeoJSON ...
SQL空间查询ST_Geometry配置 用于arcgis进行st查询的时候的数据库进行配置
geojson2h3库包含一组实用程序,可使用在GeoJSON多边形和之间进行转换。 将错误报告或功能请求发布到 通过发布到的来提问 安装 npm install geojson2h3 用法示例 import geojson2h3 from 'geojson2h3' ; const ...
中国省份geojson数据 "properties":{"id":"12","name":"天津","cp":[117.4219,39.4189],"childNum":18},"geometry":{"type":"Polygon","coordinates":[[[116.8066,39.5947],[116.8945,39.6826],[117.1582,39.6387],...
通过Oracle提供的jar包,实现jpa方式对sdo_geometry的快速支持。
{"type":"Feature","id":"49","properties":{"name":"Utah"},"geometry":{"type":"Polygon","coordinates":[[[-112.164359,41.995232],[-111.047063,42.000709],[-111.047063,40.998429],[-109.04798,40.998429],[-...