IDEA Java解析GeoJson.json文件
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文件相关推荐
- 解析超大JSON文件
解析超大JSON文件 1.需求 最近项目中需要将一个一个大于50G的JSON文件导入到ES中,试过普通的按行读取文件和JSONReader流读取文件,由于json文件实在过于庞大,都不能解决问题. 2 ...
- java上传json文件
java 上传json文件并解析 fastjson <dependency><groupId>com.alibaba</groupId><artifactId ...
- java如何读写json文件
java如何读写json文件 在实际项目开发中,有时会遇到一些全局的配置缓存,最好的做法是配置redis数据库作为数据缓存,而当未有配置redis服务器时,读取静态资源文件(如xml.json等)也是 ...
- android最大json,Android:解析大型JSON文件
我正在创建一个Android应用程序,该应用程序应该将Json从文件或网址解析为jsonarray和jsonobjects. 问题是,我的JSON是3.3 MB,当我使用一个简单的代码,如下所示:(现 ...
- JSON定义及解析,JSON文件读写
文章目录 JSON 定义 要点 简单的JSON实例 JSON的文档结构 对象 数组 数据类型 值 字符串说明 关于轨道图的嵌套 JSON实例 使用JsonCpp进行JSON文件读写 类图关系 常用接口 ...
- Android 天气预报【解析XML / Json文件(2种方式:手动解析、Gson库解析)】
源码 [工程文件]:https://gitee.com/lwx001/Weather XML : activity_main.xml : <RelativeLayout xmlns:androi ...
- 通过weui-1.1.3源码学习前端开发(一)解析package.json文件
想在微信公众号上开发一个小的应用,找到了weui,顺便看看它的源代码,也算是学习前端开发了. 先看一下weui-1.1.3的源程序目录结构. weui的目录结构 首先看看package.json文件, ...
- Java实现将JSON文件导出到Excel
文章目录 一.运行环境 二.需求描述 三.实现思路 四.实现代码 一.运行环境 windows10 IDEA 2022 JDK 8 Maven 3.8.6 Apache POI 5 fastjson2 ...
- 【JSON文件解析】JSON文件
文章目录 概要:本期主要介绍Qt解析JSON数据格式文件的方式. 一.JSON数据格式 1.JSON类似于XML,在JSON文件中,==有且只有一个根节点 2.JSON有两种主流包含型构造字符:{对象 ...
最新文章
- 如何从复杂的货币种类中选出人民币格式的数字
- QDoc创建帮助项目文件
- 如何将道具传递给{this.props.children}
- 简书首页标题配图bug,偶发,未能重现(可以重现2017-12)
- cas server + cas client 单点登录 原理介绍
- 算法:有效九宫格数独Valid Sudoku
- 安装ALEXA工具条
- 计算机名字好听的,好听的昵称大全
- 用Snoop工具来探测WPF窗体的构成
- 原生JS实现图片爆炸特效
- Sphinx Mysql Full-Search速成指南
- 1192: 删除记录(结构体专题)
- 网页上做笔记--Diigo
- 深入Flutter(四) Infinite scrolling -- 无限滚动
- win7系统(64/32位)安装office2010时提示需要msxml6.10.1129,问题的解决记录
- tampermonkey油猴插件|tampermonkey油猴脚本
- 网络安全架构部署:Fail Closed,Fail Open,Fail safe,Fail over是什么意思?
- java程序设计实验报告代写_代写file I/O作业、代写java Scanner I/O程序、代写java编程作业、代做java实验报告...
- LeetCode hot-100 简单and中等难度,41-50.
- 闻之梦中,曾经如是(1)
热门文章
- [JAVAEE] 理解“自然模板“+使用 ModelAndView 对象
- Android 删除无用的导包
- .NET Core微服务之基于MassTransit实现数据最终一致性(Part 1)
- 熟悉常用的Linux操作
- Redis创建高可用集群教程【Windows环境】
- Java IO流学习总结四:缓冲流-BufferedReader、BufferedWriter
- V8 JavaScript引擎研究(三)垃圾回收器的实现
- ASP.NET MVC 4 (十三) 基于表单的身份验证
- 监听指定端口数据交互(HttpListenerContext )
- ubuntu中启用ssh服务