使用geotools 解析shp文件 不适用java11

jar包在maven仓库是没有的 所以使用jar打包到本地的方式

jar包在我的资源里面有可以下载

pom文件

<!-- 解析shp文件--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version></dependency><dependency><groupId>com.vividsolutions</groupId><artifactId>jts</artifactId><version>1.11</version></dependency><dependency><groupId>com.googlecode.json-simple</groupId><artifactId>json-simple</artifactId><version>1.1</version></dependency><!--解析shp文件用的jar包,本地jar包--><dependency><groupId>org.opengis</groupId><artifactId>geoapi</artifactId><version>2.3-M1</version></dependency><dependency><groupId>org.opengis</groupId><artifactId>geoapi-pending</artifactId><version>2.3-M1</version></dependency><dependency><groupId>org.geotools</groupId><artifactId>gt-api</artifactId><version>2.7-M0</version></dependency><dependency><groupId>org.geotools</groupId><artifactId>gt-geojson</artifactId><version>2.7-M0</version></dependency><dependency><groupId>org.geotools</groupId><artifactId>gt-main</artifactId><version>2.7-M0</version></dependency><dependency><groupId>org.geotools</groupId><artifactId>gt-metadata</artifactId><version>2.7-M0</version></dependency><dependency><groupId>org.geotools</groupId><artifactId>gt-shapefile</artifactId><version>2.7-M0</version></dependency>

解析的代码

/*** 导入shp文件解析* @param files 文件* @return 解析结果*/public AjaxResult importShp(MultipartFile[] files){long start=System.currentTimeMillis();String fileId=UUID.randomUUID().toString();File shapeFile=null;File shxFile=null;try{if(null==files||files.length<2){return AjaxResult.error("文件不能为空并且必须包含.shp和对应的.shx文件");}if(!files[0].getOriginalFilename().contains(".shp")&&!files[0].getOriginalFilename().contains(".shx")){return AjaxResult.error("文件类型必须是.shp和对应的.shx文件");}if(!files[1].getOriginalFilename().contains(".shp")&&!files[1].getOriginalFilename().contains(".shx")){return AjaxResult.error("文件类型必须是.shp和对应的.shx文件");}//转换成file文件 然后进行解析for (MultipartFile img : files) {String fileName =img.getOriginalFilename();if (fileName.contains(".shp")) {fileName =fileId+".shp";File file = new File(rsConfig.getThumbnailTempUrl(),fileName);if (!file.exists()){img.transferTo(file);}else{file.delete();img.transferTo(file);}shapeFile=file;}else if(fileName.contains(".shx")){fileName =fileId+".shx";File file = new File(rsConfig.getThumbnailTempUrl(),fileName);if (!file.exists()){img.transferTo(file);}else{file.delete();img.transferTo(file);}shxFile=file;}}ShapefileDataStore store = new ShapefileDataStore(shapeFile.toURI().toURL());//设置编码Charset charset = Charset.forName("GBK");store.setStringCharset(charset);SimpleFeatureSource sfSource = store.getFeatureSource();SimpleFeatureIterator sfIter = sfSource.getFeatures().features();// 从ShapeFile文件中遍历每一个Feature,然后将Feature转为GeoJSON字符串List<String> pointList=new ArrayList<>();while (sfIter.hasNext()) {SimpleFeature feature = sfIter.next();// Feature转GeoJSONFeatureJSON fjson = new FeatureJSON();StringWriter writer = new StringWriter();fjson.writeFeature(feature, writer);String pointJson = writer.toString();if(StringUtils.isNotEmpty(pointJson)){//解析出来的文件有问题 自己处理下pointJson=pointJson.replace(":}",":{}");}log.debug("pointJson===== >>>>{} " ,pointJson);getPoints(pointJson,pointList);}log.info("importShp.delay={}",(System.currentTimeMillis() - start));//转换格式 返回给前端return AjaxResult.success("成功",pointList);}catch (Exception e){log.error("importShp.error={}",e);} finally {//删除临时文件if(null!=shapeFile&&shapeFile.exists()){shapeFile.delete();}if(null!=shxFile&&shxFile.exists()){shxFile.delete();}}return AjaxResult.error("解析失败");}/*** 解析组装数据* @param json 数据* @param pointList 经纬度信息*/public void getPoints(String json,List<String> pointList){JSONObject jsonObject=JSONObject.parseObject(json);JSONObject geometry=jsonObject.getJSONObject("geometry");String type=geometry.getString("type");JSONArray coordinates=geometry.getJSONArray("coordinates");if("MultiPolygon".equals(type)) {//多个for (int k = 0; k < coordinates.size(); k++) {List<String> points=new ArrayList<>();JSONArray tempArray = coordinates.getJSONArray(k).getJSONArray(0);for (int j = 0; j < tempArray.size(); j++) {JSONArray array = tempArray.getJSONArray(j);String point=array.getDoubleValue(0)+","+array.getDoubleValue(1);points.add(point);}String pointTem=points.stream().collect(Collectors.joining(";"));pointList.add(pointTem);}}else if("Polygon".equals(type)) {//单个JSONArray tempArray = coordinates.getJSONArray(0);List<String> points=new ArrayList<>();for (int j = 0; j < tempArray.size(); j++) {JSONArray array = tempArray.getJSONArray(j);String point=array.getDoubleValue(0)+","+array.getDoubleValue(1);points.add(point);}String pointTem=points.stream().collect(Collectors.joining(";"));pointList.add(pointTem);}}

线上环境java11  所以要变更使用的jar信息

Upgrade — GeoTools 28-SNAPSHOT User Guide

IntelliJ Quickstart — GeoTools 28-SNAPSHOT User Guide

从此处下载所需的对应的版本的jar 包

Nexus Repository Manager

Nexus Repository Manager

  <!-- 解析shp文件--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version></dependency><dependency><groupId>com.vividsolutions</groupId><artifactId>jts</artifactId><version>1.13</version></dependency><dependency><groupId>com.googlecode.json-simple</groupId><artifactId>json-simple</artifactId><version>1.1.1</version></dependency><dependency><groupId>org.locationtech.jts</groupId><artifactId>jts-core</artifactId><version>1.16.1</version></dependency><!--解析shp文件用的jar包,本地jar包--><dependency><groupId>org.opengis</groupId><artifactId>geoapi</artifactId><version>2.3-M3</version></dependency><dependency><groupId>org.opengis</groupId><artifactId>geoapi-pending</artifactId><version>2.3-M3</version></dependency><dependency><groupId>org.geotools</groupId><artifactId>gt-geojson</artifactId><version>21.5</version></dependency><dependency><groupId>org.geotools</groupId><artifactId>gt-main</artifactId><version>21.5</version></dependency><dependency><groupId>org.geotools</groupId><artifactId>gt-metadata</artifactId><version>21.5</version></dependency><dependency><groupId>org.geotools</groupId><artifactId>gt-shapefile</artifactId><version>21.5</version></dependency><dependency><groupId>org.geotools</groupId><artifactId>gt-opengis</artifactId><version>21.5</version></dependency>
<dependency><groupId>org.geotools</groupId><artifactId>gt-referencing</artifactId><version>21.5</version></dependency>
  public static void main(String[] args) throws Exception {File shapeFile = new File("D:\\","single.shp");ShapefileDataStore store = new ShapefileDataStore(shapeFile.toURI().toURL());//设置编码Charset charset = Charset.forName("GBK");store.setCharset(charset);SimpleFeatureSource sfSource = store.getFeatureSource();SimpleFeatureIterator sfIter = sfSource.getFeatures().features();// 从ShapeFile文件中遍历每一个Feature,然后将Feature转为GeoJSON字符串List<String> pointList=new ArrayList<>();while (sfIter.hasNext()) {SimpleFeature feature = sfIter.next();// Feature转GeoJSONFeatureJSON fjson = new FeatureJSON();StringWriter writer = new StringWriter();fjson.writeFeature(feature, writer);String pointJson = writer.toString();System.out.println(pointJson);}}

java解析shp文件相关推荐

  1. java解析shp文件以及坐标转换(工具类)

    百度找了很多大部分都是pom的,maven项目中的,但是用maven下载不了,只能一个jar一个jar下载了,中间也遇到了很多坑,都是pom中没有提到的架包 直接上代码,最后我会解析shp文件所用到的 ...

  2. java 解析 csv 文件

    文章分类:JavaEye 一.貌似有bug,不行用 二.或 三. 的方法 Java代码   import java.io.BufferedReader; import java.io.FileInpu ...

  3. 用正则表达式和java解析csv文件

    用正则表达式和java解析csv文件 作者:弹着钢琴设计  来源:博客园  发布时间:2009-06-15 18:31  阅读:337 次  原文链接   [收藏]   在解析csv文件之前,先来看看 ...

  4. java解析dxf文件_浅析JVM方法解析、创建和链接

    一:前言 上周末写了一篇文章<你知道Java类是如何被加载的吗?>,分析了HotSpot是如何加载Java类的,干脆趁热打铁,本周末再来分析下Hotspot又是如何解析.创建和链接类方法的 ...

  5. java解析xml文件

    使用java解析xml文件,通过dom4j. 代码如下: package com.java.team; import java.io.File; import java.util.ArrayList; ...

  6. java解析Excel文件

    下文介绍java解析Excel文件的方案 前置准备 1.第三方jar包或者Maven配置 org.apache.poi的jar包 Maven配置如下 <groupId>org.apache ...

  7. XML解析 (JAVA解析xml文件)java+Dom4j+Xpath xml文件解析根据子节点得到父节点 查找校验xml文件中相同的节点属性值 java遍历文件夹解析XML

    XML解析 (JAVA解析xml文件)java+Dom4j+Xpath xml文件解析根据子节点得到父节点 以及查找xml文件中相同的节点属性值 项目背景:这是本人实习中所碰到的项目,当时感觉很棘手, ...

  8. JAVA解析.xlsb文件

    Java解析.Xlsb文件 pom.xml <dependency><groupId>org.apache.poi</groupId><artifactId& ...

  9. java解析xml文件的几种方式(DOM解析)

    好久不用的东西,今天居然被面试官问到了.那既然这样,我们就一起回顾下java解析xml文件的几种方式吧. DOM解析 dom解析所需依赖是我们jdk自带的,所以只需要使用jdk为我们提供的接口即可上手 ...

  10. Java解析yaml文件

    Java解析yaml文件 1. 什么是yaml ? 2. 导入maven依赖 3. yaml 案例文件 4. 示例代码 5. 解析结果 1. 什么是yaml ? 参考下方链接 yaml快速入门 2. ...

最新文章

  1. 哈佛牙学院博士后:教你口腔保健基本功之刷牙篇
  2. FPGA逻辑设计回顾(9)DDR的前世今生以及演变过程中的技术差异
  3. 基于jquery仿天猫分类导航banner切换
  4. FFmpegh.264解码
  5. 分享一下最近看的东西
  6. 眨眼检测计算机不精确,基于OpenCV和Python错误的眨眼检测
  7. masaic 数据增强代码
  8. 管家婆财贸双全 凭证记账 Date exceeds maximum of 19-12-31 报错解决办法
  9. 搭建微信多开服务器,电脑微信多开你都不会?教你简单实现
  10. php怎么给图片添加文字,使用php怎么给图片添加文字水印
  11. 微信公众号支付|微信H5支付|微信扫码支付|小程序支付|APP微信支付
  12. “全包”给装修公司,验收时发现甲醛超标,能要求重装或赔偿吗?
  13. 利用python爬虫大量爬取网页图片
  14. c语言二级指针与二维数组
  15. Android 绘制电池电量图标(含充电状态)。
  16. 还在抱怨数据结构难? 一文带你搞懂如何AC算法题(2022版)
  17. php表格js用时间查询,使用JS将数据显示到表格中(时间:2019.01.17)
  18. 全搜索法FS、三步搜索法TSS、菱形搜索法DS
  19. 祛痘产品微商怎么引流?祛痘产品如何引流精准客户
  20. 30秒学会 —— 《获取验证码基本操作》

热门文章

  1. 近3年微软与谷歌的发展对比分析
  2. Android知识笔记:特效系列,仿instagram文字排版特效,android应用开发基础学堂在线答案
  3. 基于微信小程序的学生健康管理系统
  4. 将Altera FPGA的sof文件和NIOS II的elf固件合并为一个jic文件以使用Quartus Programmer烧写
  5. 数据库 表设计案例+经验 [vaynexiao]
  6. exescope使用
  7. 【PowerBuilder 9.0 使用时第一次遇到的错误 c0031】
  8. f(x)=sinx的求导过程
  9. CATIA二次开发VBA:(一)宏的录制、修改及回放
  10. 创维机顶盒E900刷LinuxNas系统