当前位置: 首页 > 知识库问答 >
问题:

如何为GeoJSON配置Spring Boot实体?

劳昊明
2023-03-14

我想使用Spring Boot和JPA将GeoJSON保存到数据库

JSON对象示例:

    {
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {
        "type": "polyline"
      },
      "geometry": {
        "type": "LineString",
        "coordinates": [
          [
            21.011127,
            52.230914
          ],
          [
            21.013166,
            52.229978
          ],
          [
            21.011331,
            52.22911
          ],
          [
            21.00845,
            52.228953
          ],
          [
            21.009062,
            52.230011
          ],
          [
            21.009513,
            52.230287
          ]
        ]
      }
    },
    {
      "type": "Feature",
      "properties": {
        "type": "polyline"
      },
      "geometry": {
        "type": "LineString",
        "coordinates": [
          [
            21.022489,
            52.226406
          ],
          [
            21.023004,
            52.228995
          ],
          [
            21.018069,
            52.230007
          ],
          [
            21.018755,
            52.225618
          ],
          [
            21.016202,
            52.22454
          ],
          [
            21.013906,
            52.226735
          ]
        ]
      }
    },
    {
      "type": "Feature",
      "properties": {
        "type": "polyline"
      },
      "geometry": {
        "type": "LineString",
        "coordinates": [
          [
            21.013627,
            52.232005
          ],
          [
            21.018165,
            52.231933
          ],
          [
            21.019228,
            52.232537
          ],
          [
            21.019989,
            52.232925
          ],
          [
            21.019109,
            52.233201
          ]
        ]
      }
    }
  ]
}

我试图使用@ElementCollection和@Embedded配置实体。

GeoJson实体:

@Getter
@Setter
@ToString
@RequiredArgsConstructor
@Entity
public class GeoJson {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String type;
    @ElementCollection(targetClass = Feature.class)
    private List<Feature> features;
}

特点:

@Getter
@Setter
@ToString
@RequiredArgsConstructor
@Embeddable
public class Feature {
    private String type;
    @Embedded
    private Properties properties;
    @Embedded
    private Geometry geometry;
}

属性:

@Getter
@Setter
@ToString
@RequiredArgsConstructor
@Embeddable
public class Properties {
    private String type;
}

几何:

@Getter
@Setter
@ToString
@RequiredArgsConstructor
@Embeddable
public class Geometry {
    private String type;
    @ElementCollection(targetClass = Coordinate.class)
    private List<Coordinate> coordinates;
}

坐标:

@Getter
@Setter
@ToString
@RequiredArgsConstructor
@Embeddable
public class Coordinate {
    private BigDecimal lat;
    private BigDecimal lng;
}

此配置出现错误:

调用init方法失败;嵌套的异常是javax。坚持不懈PersistenceException:[PersistenceUnit:default]无法构建Hibernate SessionFactory;嵌套异常为org。冬眠MappingException:无法确定java的类型。util。在表中列出:geo_json_特性,用于org的列:[org.hibernate.mapping.Column(coordinates)]。springframework。豆。工厂支持AbstractAutowireCapableBeanFactory。initializeBean(AbstractAutowireCapableBeanFactory.java:1804)~[spring-beans-5.3.15.jar:5.3.15]

我尝试了其他映射方法,如@ManytoOne或@Manyto多国,但都不起作用。如何配置GeoJson实体以持久化?也许我应该在两个ElementCollection中添加@CollsionTable注释,但我不知道如何正确执行

共有1个答案

聂和宜
2023-03-14

您可以使用geotools库,它处理需要在pom中添加所需依赖项的几何体类型。xml以下是依赖项:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-spatial</artifactId>
        <version>${hibernate.version}</version>
    </dependency>
    <dependency>
        <groupId>org.n52.jackson</groupId>
        <artifactId>jackson-datatype-jts</artifactId>
        <version>1.2.10</version>
    </dependency>
    <dependency>
        <groupId>org.geotools</groupId>
        <artifactId>gt-geojsondatastore</artifactId>
        <version>26.4</version>
    </dependency>

试试这段代码,你可以从geojson文件中获得几何图形:

       File inFile = new File("yourpath/file.geojson");
        var geojsonStore = new GeoJSONDataStore(inFile);
        SimpleFeatureSource source = geojsonStore.getFeatureSource();
        SimpleFeatureCollection features = source.getFeatures();
        var iterator = features.features();
        while (iterator.hasNext()) {
            // copy the contents of each feature and transform the geometry
            SimpleFeature feature = iterator.next();
            System.out.println(feature.getAttributes());

        }  
 类似资料:
  • 我在学习Spring Boot时遇到了一些编码问题;我想添加一个像Spring3.x那样的CharacterEncodingFilter。就像这样:

  • 本文向大家介绍SpringBoot配置https实操方法,包括了SpringBoot配置https实操方法的使用技巧和注意事项,需要的朋友参考一下 升级 https 记录 1、去阿里云购买证书(免费版),并提交审核资料 购买的证书 2、下载证书 下载证书 3、查看上图页面的第三步 JKS证书安装 4、在证书目录下执行阿里云提供的命令,密码都填 pfx-password.txt 中的内容(三次),会

  • 本文向大家介绍SpringBoot之Java配置的实现,包括了SpringBoot之Java配置的实现的使用技巧和注意事项,需要的朋友参考一下 Java配置也是Spring4.0推荐的配置方式,完全可以取代XML的配置方式,也是SpringBoot推荐的方式。 Java配置是通过@Configuation和@Bean来实现的:   1、@Configuation注解,说明此类是配置类,相当于Spr

  • <dependencyManagement> <dependencies> <dependency> <!--Import dependency management from SpringBoot--> <groupId>org.springframework.boot</groupId>

  • 我有教育问题: 存在具有windows server 2003(AD)的虚拟机,其中包含用户及其密码。已建立与机器的连接(ip:192.168.56.101:389)。 Web应用程序的目的是使用户能够在AD中更改他的密码。 问题:无法配置到windws server 2003的连接。 我从这个教程开始https://spring.io/guides/gs/authenticating-ldap/

  • 我尝试将springboot应用程序配置为每天登录一个文件,因此我将logback.xml配置为: 所以当我尝试运行我的应用程序时,我得到了这个错误: