`
wiselyman
  • 浏览: 2095979 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
博客专栏
Group-logo
点睛Spring4.1
浏览量:82482
74ae1471-94c5-3ae2-b227-779326b57435
点睛Spring MVC4...
浏览量:130895
社区版块
存档分类
最新评论

Spring Boot(MVC)下空间字段(Geometry)与geojson的自动转换

 
阅读更多

在上一篇文章利用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/

1
0
分享到:
评论

相关推荐

    geojson-geometry-shp格式相互转化总结

    【标题】:GeoJSON与Geometry SHP格式转换详解 【描述】:在Java开发中,经常需要处理不同地理数据格式的转换,特别是GeoJSON和Geometry SHP格式之间的互换。本篇文章将对这两种格式的数据转换过程进行详尽的阐述,...

    空间数据的转换与处理

    ### 空间数据的转换与处理 #### 投影变换 空间数据是地理信息系统(GIS)的关键组成部分,GIS的工作流程主要包括空间数据的采集、加工、存储、分析和展示等环节。由于原始数据可能在数据结构、组织形式、表达方式...

    SuperMap iMobile for Android数据集与GeoJSON格式的转换

    **SuperMap iMobile for Android 数据集与 GeoJSON 格式转换详解** 在移动GIS应用中,数据交换和格式转换是至关重要的环节。SuperMap iMobile for Android 是一款强大的移动GIS平台,它支持多种数据格式,其中包括...

    Oracle sdo_geometry空间坐标系转换

    其中,空间坐标系的转换是一项重要的功能,尤其是在需要将不同坐标系下的地理数据进行集成与分析时。本文将详细介绍如何利用Oracle提供的`MDSYS.CS_SRS`表以及`sdo_cs`包来进行空间坐标的转换,并提供实用的操作步骤...

    中国省市区县行政区划边界GeoJSON数据下载转换

    本文将深入探讨如何处理和使用“中国省市区县行政区划边界GeoJSON数据”,以及与JavaScript开发相关的地图技术。 首先,"中国省市区县行政区划边界GeoJSON数据"是指包含中国所有省份、城市、区县行政区域边界信息的...

    geoJson.rar_geojson_geojson 下载_geojson 中国_paragraph47z_地图geojson

    GeoJSON是一种基于JSON(JavaScript Object Notation)的地理编码数据格式,用于表示地理空间信息。在给定的“geoJson.rar”压缩包中,我们很可能找到了一个或多个GeoJSON文件,这些文件通常用于存储地理坐标数据,...

    世界所有国家geojson数据

    GeoJSON是一种轻量级的数据交换格式,用于存储地理空间数据,尤其在Web应用程序中非常常见。它是基于JSON(JavaScript Object Notation)语法的,因为JSON是互联网上最广泛接受的数据交换格式之一,易于人类阅读和...

    turf-to-geometries:将任意 GeoJSON 转换为几何图形

    获取任意 GeoJSON 对象并将其转换为 Geometry 或 GeometryCollection 参数 范围 类型 描述 geojson 特征,几何,特征集合,几何集合 要转换的 geojson 例子 var poly = { "type" : "Feature" , "properties" : { ...

    Python-转换Human数据导出至geoJSON

    在这个过程中,可能还需要处理缺失数据、数据清洗、坐标系转换(如从EPSG:4326转换为其他坐标系统),以及根据实际需求定制geoJSON输出的属性字段。 通过以上步骤,我们可以将Human数据有效地转换为geoJSON格式,使...

    GeoJson的生成与解析所需jar包

    - **与其他GIS数据格式互转**:Geotools支持多种GIS格式,可以方便地将GeoJson与其他格式(如Shapefile、KML等)互相转换。 在实际应用中,你可能需要先导入这三个库到你的Java项目中,然后通过编程接口来实现...

    Three.js渲染GeoJSON.zip

    总之,“Three.js渲染GeoJSON”是一个展示如何将地理空间数据与3D图形技术结合的示例,它可以帮助开发者提升Web应用程序的视觉效果和用户体验。通过学习和应用这个项目,你可以掌握将GeoJSON数据转换为3D可视化的...

    利用Python实现Shp格式向GeoJSON的转换方法

    ### 利用Python实现Shp格式向GeoJSON的转换方法 #### 一、简介 在地理信息系统(GIS)领域中,不同的数据格式有着各自的应用场景。例如,Shapefile(.shp)是一种广泛使用的矢量数据格式,尤其适用于桌面GIS软件如...

    arcgis api for javascript 4.5实现二三维地图添加geojson数据

    本文将深入探讨如何利用ArcGIS API for JavaScript 4.5版本实现二三维地图中添加GeoJSON数据,以及GeoJSON数据与ArcGIS JSON数据格式之间的转换。 GeoJSON是一种开放的标准格式,用于存储地理空间数据,它基于JSON...

    GeoJSON全国地图,下钻到区级

    在本案例中,“GeoJSON全国地图,下钻到区级”意味着提供的数据集包含了中国所有区县级别的地理信息,支持用户进行深入的地图探索,例如在Echarts这样的数据可视化库中实现逐级缩放和下钻功能。 Echarts是一个基于...

    各省份Geojson数据.zip

    Geojson是一种基于JSON格式的数据交换标准,主要用于地理空间数据的存储和交换。它结合了JSON的简洁性和GIS(地理信息系统)的数据模型,使得地理信息在Web应用中更加易用和可交互。本压缩包“各省份Geojson数据.zip...

    postgis-geojson:用于PostGIS Geometry对象的GeoJSON Jackson序列化器和反序列化器

    postgis-geojson 用于PostGIS Geometry对象的GeoJSON Jackson序列化器和反序列化器。GeoJSON支持该库支持对GeoJSON规范中定义的所有序列化/反序列化。 下面给出了GeoJSON几何对象与PostGIS对象之间的关系: GeoJSON ...

    河南行政区划的矢量数据,geojson格式

    《深入理解GeoJSON格式与河南省行政区划矢量数据》 GeoJSON是一种开放的地理空间数据格式,主要用于存储地理坐标数据,如点、线和多边形。它基于JSON(JavaScript Object Notation)语法,因为JSON在Web开发中广泛...

    geojson格式世界地图GS84和Web墨卡托两种投影

    每个`Feature`代表一个地物,如国家,其`geometry`字段定义了地物的形状,`properties`则包含附加信息。 通过这种格式,开发者可以轻松地解析和渲染地图,同时支持跨平台和跨应用程序的数据交换。例如,你可以使用...

    全球GEOJSON

    全球GEOJSON是一种数据格式,用于存储地理空间信息,它基于JSON(JavaScript Object Notation)标准,被广泛应用于Web地图服务、地理信息系统和数据分析等领域。GeoJSON提供了一种轻量级的方式来表示地理坐标数据,...

    turf-polyToLineString:将有效的GeoJSON多边形转换为线串

    将有效的GeoJSON多边形转换为线串 草皮多边形到线串模块 turf.polyToLineString(polygon) 采用GeoJSON Polygon功能并将其作为GeoJSON线串返回。 参数 范围 类型 描述 polygon 多边形 GeoJSON多边形 例子 var ...

Global site tag (gtag.js) - Google Analytics