IDEA Java解析GeoJson.json文件

  • 一、遇到的问题
    • 1. 无法导入成功
    • 2. org.geotools.StyleFactory is not an ImageIO SPI class
    • 3. Error parsing epsg:4326 as crs id
    • 4. resolution will not be reattempted until the update interval of XXX has elapsed or updates are force
    • 5. Exception java.lang.NoClassDefFoundExcepthon: org.geotools.util.factory.FactoryFinder
  • 二、源码
    • 1. pom.xml
    • 2. 源码
    • 3. geojson示例文件
    • 4. settings.xml
  • 三、注意
    • 参考

一、遇到的问题

1. 无法导入成功

2. org.geotools.StyleFactory is not an ImageIO SPI class

解决: https://ask.csdn.net/questions/4105133
调整为jdk1.8就ok了

3. Error parsing epsg:4326 as crs id

换一个geojson示例的crs json串

4. resolution will not be reattempted until the update interval of XXX has elapsed or updates are force

解决: https://blog.csdn.net/u013066244/article/details/91986308

5. Exception java.lang.NoClassDefFoundExcepthon: org.geotools.util.factory.FactoryFinder


解决:所有的maven pom依赖都不能少

二、源码

1. pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.jjxliu.geotools</groupId><artifactId>geojson-demo</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>geojson-demo</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><geotools.version>17.1</geotools.version></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId><version>2.1.9.RELEASE</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>compile</scope><version>1.18.10</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.75</version></dependency><dependency><groupId>org.geotools</groupId><artifactId>gt-shapefile</artifactId><version>22.3</version></dependency><dependency><groupId>org.geotools</groupId><artifactId>gt-swing</artifactId><version>${geotools.version}</version></dependency><!-- for geotools begin --><dependency><groupId>org.geotools</groupId><artifactId>gt-geojson</artifactId><version>24.2</version></dependency><!-- https://mvnrepository.com/artifact/org.geotools/gt-main --><dependency><groupId>org.geotools</groupId><artifactId>gt-main</artifactId><version>${geotools.version}</version></dependency><dependency><groupId>org.geotools</groupId><artifactId>gt-api</artifactId><version>${geotools.version}</version></dependency><dependency><groupId>org.geotools</groupId><artifactId>gt-opengis</artifactId><version>${geotools.version}</version></dependency><dependency><groupId>org.geotools</groupId><artifactId>gt-data</artifactId><version>${geotools.version}</version></dependency><dependency><groupId>org.geotools</groupId><artifactId>gt-referencing</artifactId><version>${geotools.version}</version></dependency><dependency><groupId>org.geotools</groupId><artifactId>gt-jdbc</artifactId><version>${geotools.version}</version></dependency><dependency><groupId>org.geotools.jdbc</groupId><artifactId>gt-jdbc-postgis</artifactId><version>${geotools.version}</version></dependency><dependency><groupId>org.geotools</groupId><artifactId>gt-epsg-hsql</artifactId><version>${geotools.version}</version></dependency><!--for geotools end--><dependency><groupId>org.opengeo</groupId><artifactId>geodb</artifactId><version>0.9</version><scope>runtime</scope></dependency><dependency><groupId>com.bedatadriven</groupId><artifactId>jackson-datatype-jts</artifactId><version>2.4</version></dependency><!-- https://mvnrepository.com/artifact/org.locationtech.jts/jts-core --><dependency><groupId>org.locationtech.jts</groupId><artifactId>jts-core</artifactId><version>1.18.0</version></dependency><!-- https://mvnrepository.com/artifact/org.gdal/gdal --><dependency><groupId>org.gdal</groupId><artifactId>gdal</artifactId><version>3.2.0</version><type>pom</type></dependency><!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --><!-- <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.12.1</version></dependency>--><dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.4</version><classifier>jdk15</classifier></dependency></dependencies><repositories><repository><id>osgeo</id><name>OSGeo Release Repository</name><url>https://repo.osgeo.org/repository/release/</url><snapshots><enabled>false</enabled></snapshots><releases><enabled>true</enabled><!--不加如下updatePolicy会报错:resolution will not be reattempted until the update interval of XXX has elapsed or updates are force--><updatePolicy>always</updatePolicy></releases></repository><repository><id>maven2-repository.dev.java.net</id><name>Java.net repository</name><url>http://download.java.net/maven/2</url></repository><repository><snapshots><enabled>true</enabled></snapshots><id>boundless</id><name>Boundless Maven Repository</name><url>http://repo.boundlessgeo.com/main</url></repository></repositories><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.0.4.RELEASE</version><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build>
</project>

2. 源码

package com.test;import com.test.geojson.FeatureJSON;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.geotools.data.DataUtilities;
import org.geotools.data.collection.ListFeatureCollection;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.geotools.feature.SchemaException;
import org.geotools.feature.simple.SimpleFeatureBuilder;
import org.geotools.geojson.geom.GeometryJSON;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.LineString;
import org.locationtech.jts.geom.Point;
import org.locationtech.jts.io.ParseException;
import org.locationtech.jts.io.WKTReader;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;
import org.opengis.referencing.crs.CoordinateReferenceSystem;import java.io.IOException;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;/**************************************Class Name: GeoJsonUtil*Description: <GeoJsonUtil工具类,重写FeatureJSON>*@create: 2021/2/23*@since 1.0.0*************************************/
@Slf4j
public class GeoJsonUtil {public void lineString2FeatureCollection() throws IOException, SchemaException, ParseException {String[] WKTS = {"LINESTRING (255351.04293761664 474966.9279243938, 255529.29662365236 474272.4599921228)","LINESTRING (255529.29662365236 474272.4599921228, 256166.05830998957 473979.44920198264)"};final SimpleFeatureType TYPE = DataUtilities.createType("Link","geometry:LineString," + // <- the geometry attribute: Point type"gid:String," +   // <- a String attribute"direction:Integer," +   // a number attribute"orientation:Integer");SimpleFeatureBuilder featureBuilder = new SimpleFeatureBuilder(TYPE);GeometryFactory geometryFactory = new GeometryFactory();WKTReader reader = new WKTReader(geometryFactory);FeatureJSON fjson = new FeatureJSON();List<SimpleFeature> features = new ArrayList<>();SimpleFeatureCollection collection = new ListFeatureCollection(TYPE, features);for (String wkt : WKTS) {LineString lineString = (LineString) reader.read(wkt);featureBuilder.add(lineString);featureBuilder.add("123456");featureBuilder.add(2);featureBuilder.add(1);SimpleFeature feature = featureBuilder.buildFeature(null);features.add(feature);}StringWriter writer = new StringWriter();fjson.writeFeatureCollection(collection, writer);System.out.println(writer.toString());}public void point2FeatureCollection() throws IOException, SchemaException, ParseException {String[] WKTS = {"POINT (255351.04293761664 474966.9279243938 1.0)","POINT (255529.29662365236 474272.4599921228 2.0)","POINT (256166.05830998957 473979.44920198264 3.111)"};// 坐标顺序是EAST_NORTH,即经度在前String json = "{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"properties\":{\"area\":3865207830, \"text\": null},\"id\":\"polygon.1\",\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[116.19827270507814,39.78321267821705],[116.04446411132814,39.232253141714914],[116.89590454101562,39.3831409542565],[116.86981201171876,39.918162846609455],[116.19827270507814,39.78321267821705]]]}}],\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}}}";FeatureJSON fjson_15 = new FeatureJSON(new GeometryJSON(15));CoordinateReferenceSystem crs = fjson_15.readCRS(json);final SimpleFeatureType TYPE = DataUtilities.createType("Point","geometry:Point," + // <- the geometry attribute: Point type"id:String," +   // <- a String attribute"mag:Integer" // <- 权重,叠加次数);SimpleFeatureBuilder featureBuilder = new SimpleFeatureBuilder(TYPE);GeometryFactory geometryFactory = new GeometryFactory();WKTReader reader = new WKTReader(geometryFactory);FeatureJSON fjson = new FeatureJSON();List<SimpleFeature> features = new ArrayList<>();SimpleFeatureCollection collection = new ListFeatureCollection(TYPE, features);for (String wkt : WKTS) {Point point = (Point) reader.read(wkt);featureBuilder.add(point);featureBuilder.add("1");featureBuilder.add(2);SimpleFeature feature = featureBuilder.buildFeature(null);features.add(feature);}StringWriter writer = new StringWriter();fjson.setEncodeFeatureCollectionCRS(true);fjson.writeFeatureCollection(collection, writer);System.out.println(writer.toString());}public static void main(String[] args) throws ParseException, IOException, SchemaException {GeoJsonUtil geoJsonUtil = new GeoJsonUtil();geoJsonUtil.point2FeatureCollection();List<String> list1 = new ArrayList<>();list1.add("1");list1.add("2");list1.add("3");String deArr[] = list1.toArray(new String[list1.size()]);String str = "('" + StringUtils.join(deArr, "','") + "')";log.info("str: {}", str);}
}

3. geojson示例文件

{"type": "FeatureCollection","features": [{"properties": {"version": 0},"id": "1","type": "Feature","geometry": {"type": "Polygon","coordinates": [[[1868732.467515988,6594375.3042187244],[1868732.467515988,5165920.1196253505],[3297187.6521093622,5165920.1196253505],[3297187.6521093622,6594375.3042187244],[1868732.467515988,6594375.3042187244]]]}}]
}

4. settings.xml

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"><localRepository>D:\mavenrepositories</localRepository><servers><server><id>nexus</id><username>radmin</username><password>radmin123</password></server><server><id>xxxxxx-releases</id><username>radmin</username><password>radmin123</password></server><server><id>xxxxxx-snapshots</id><username>radmin</username><password>radmin123</password></server><server><id>aliyun</id><username>ali</username><password>ali</password></server></servers><!--<mirrors><mirror><id>xxxxxx</id><mirrorOf>xxxxxx</mirrorOf><url>http://192.133.2.111:9999/nexus/content/groups/public/</url></mirror><mirror><id>aliyun</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>*,!osgeo,!maven2-repository.dev.java.net,!boundless</mirrorOf></mirror><mirror><id>osgeo</id><mirrorOf>osgeo</mirrorOf><url>http://download.osgeo.org/webdav/geotools/</url></mirror><mirror><id>boundless</id><mirrorOf>boundless</mirrorOf><url>https://repo.boundlessgeo.com/main/</url></mirror></mirrors>--><profiles><profile><id>aliyun</id><repositories><repository><id>aliyun-releases</id><name>Releases</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><releases><enabled>true</enabled><updatePolicy>always</updatePolicy></releases><snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots></repository><repository><id>aliyun-snapshots</id><name>Snapshots</name><url>http://maven.aliyun.com/nexus/content/repositories/snapshots/</url><releases><enabled>true</enabled><updatePolicy>always</updatePolicy></releases><snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots></repository></repositories></profile><profile><id>xxxxxx</id><repositories><repository><id>xxxxxx-releases</id><name>Releases</name><url>http://192.133.2.111:9999/nexus/content/repositories/releases/</url><releases><enabled>true</enabled><updatePolicy>always</updatePolicy></releases><snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots></repository><repository><id>xxxxxx-flexgroup</id><name>flexgroup</name><url>http://192.133.2.111:9999/nexus/content/repositories/flexgroup/</url></repository><repository><id>xxxxxx-thirdparty</id><name>thirdparty</name><url>http://192.133.2.111:9999/nexus/content/repositories/thirdparty/</url></repository><repository><id>xxxxxx-snapshots</id><name>Snapshots</name><url>http://192.133.2.111:9999/nexus/content/repositories/snapshots/</url><snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots></repository></repositories><pluginRepositories><pluginRepository><id>central</id><name>Nexus</name><url>http://192.133.2.111:9999/nexus/content/groups/public/</url><releases><enabled>true</enabled><updatePolicy>always</updatePolicy></releases><snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots></pluginRepository></pluginRepositories></profile><profile><id>jdk-1.8</id><activation><activeByDefault>true</activeByDefault><jdk>1.8</jdk></activation><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion></properties></profile></profiles><activeProfiles><activeProfile>xxxxxx</activeProfile><activeProfile>aliyun</activeProfile></activeProfiles>
</settings>

三、注意

  • jdk1.8
  • 配置repository updatePolicy
  • org.locationtech.jts.geom.GeometryFactory; 与 com.vividsolutions.jts.geom.GeometryFactory; 用哪个包就导入哪个的所有类
  • gdal竟然导入成功了,原来之前导不进来是因为没有配置repository;
 <repositories><repository><id>osgeo</id><name>OSGeo Release Repository</name><url>https://repo.osgeo.org/repository/release/</url><snapshots><enabled>false</enabled></snapshots><releases><enabled>true</enabled><!--不加如下updatePolicy会报错:resolution will not be reattempted until the update interval of XXX has elapsed or updates are force--><updatePolicy>always</updatePolicy></releases></repository>
</repositories>

参考

  • Maven中GeoTools的引入 - Maven 的 repository 与 mirror
  • geojson格式介绍
  • https://www.codeleading.com/article/62773085591/
  • GeoJson的生成与解析
  • Create shapefile based on geojson data with geotools (Java)

IDEA Java解析GeoJson.json文件相关推荐

  1. 解析超大JSON文件

    解析超大JSON文件 1.需求 最近项目中需要将一个一个大于50G的JSON文件导入到ES中,试过普通的按行读取文件和JSONReader流读取文件,由于json文件实在过于庞大,都不能解决问题. 2 ...

  2. java上传json文件

    java 上传json文件并解析 fastjson <dependency><groupId>com.alibaba</groupId><artifactId ...

  3. java如何读写json文件

    java如何读写json文件 在实际项目开发中,有时会遇到一些全局的配置缓存,最好的做法是配置redis数据库作为数据缓存,而当未有配置redis服务器时,读取静态资源文件(如xml.json等)也是 ...

  4. android最大json,Android:解析大型JSON文件

    我正在创建一个Android应用程序,该应用程序应该将Json从文件或网址解析为jsonarray和jsonobjects. 问题是,我的JSON是3.3 MB,当我使用一个简单的代码,如下所示:(现 ...

  5. JSON定义及解析,JSON文件读写

    文章目录 JSON 定义 要点 简单的JSON实例 JSON的文档结构 对象 数组 数据类型 值 字符串说明 关于轨道图的嵌套 JSON实例 使用JsonCpp进行JSON文件读写 类图关系 常用接口 ...

  6. Android 天气预报【解析XML / Json文件(2种方式:手动解析、Gson库解析)】

    源码 [工程文件]:https://gitee.com/lwx001/Weather XML : activity_main.xml : <RelativeLayout xmlns:androi ...

  7. 通过weui-1.1.3源码学习前端开发(一)解析package.json文件

    想在微信公众号上开发一个小的应用,找到了weui,顺便看看它的源代码,也算是学习前端开发了. 先看一下weui-1.1.3的源程序目录结构. weui的目录结构 首先看看package.json文件, ...

  8. Java实现将JSON文件导出到Excel

    文章目录 一.运行环境 二.需求描述 三.实现思路 四.实现代码 一.运行环境 windows10 IDEA 2022 JDK 8 Maven 3.8.6 Apache POI 5 fastjson2 ...

  9. 【JSON文件解析】JSON文件

    文章目录 概要:本期主要介绍Qt解析JSON数据格式文件的方式. 一.JSON数据格式 1.JSON类似于XML,在JSON文件中,==有且只有一个根节点 2.JSON有两种主流包含型构造字符:{对象 ...

最新文章

  1. 如何从复杂的货币种类中选出人民币格式的数字
  2. QDoc创建帮助项目文件
  3. 如何将道具传递给{this.props.children}
  4. 简书首页标题配图bug,偶发,未能重现(可以重现2017-12)
  5. cas server + cas client 单点登录 原理介绍
  6. 算法:有效九宫格数独Valid Sudoku
  7. 安装ALEXA工具条
  8. 计算机名字好听的,好听的昵称大全
  9. 用Snoop工具来探测WPF窗体的构成
  10. 原生JS实现图片爆炸特效
  11. Sphinx Mysql Full-Search速成指南
  12. 1192: 删除记录(结构体专题)
  13. 网页上做笔记--Diigo
  14. 深入Flutter(四) Infinite scrolling -- 无限滚动
  15. win7系统(64/32位)安装office2010时提示需要msxml6.10.1129,问题的解决记录
  16. tampermonkey油猴插件|tampermonkey油猴脚本
  17. 网络安全架构部署:Fail Closed,Fail Open,Fail safe,Fail over是什么意思?
  18. java程序设计实验报告代写_代写file I/O作业、代写java Scanner I/O程序、代写java编程作业、代做java实验报告...
  19. LeetCode hot-100 简单and中等难度,41-50.
  20. 闻之梦中,曾经如是(1)

热门文章

  1. [JAVAEE] 理解“自然模板“+使用 ModelAndView 对象
  2. Android 删除无用的导包
  3. .NET Core微服务之基于MassTransit实现数据最终一致性(Part 1)
  4. 熟悉常用的Linux操作
  5. Redis创建高可用集群教程【Windows环境】
  6. Java IO流学习总结四:缓冲流-BufferedReader、BufferedWriter
  7. V8 JavaScript引擎研究(三)垃圾回收器的实现
  8. ASP.NET MVC 4 (十三) 基于表单的身份验证
  9. 监听指定端口数据交互(HttpListenerContext )
  10. ubuntu中启用ssh服务