java多边形合并_geotools实现多边形的合并缓冲区
这算是第一次接触开源工具包,说实话刚开始有点不知所措,中途遇到很多问题的时候也感觉头皮发麻,不过很高兴自己还是坚持下来了。
geotools就不做过多的介绍了,想总结一下如何根据开源内容做自己的项目。整个过程中技术相关的内容学到了不少,但要是都写出来篇幅就太长了,所以这篇主要是写一些自己总结的开发流程上的东西。
一、 对要参考的开源项目有一个宏观的把握
geotools是一个 GIS 开源工具包,官网有入门教程和一系列的参考文档,这些东西是非常关键的,要想把geotools里面的各个jar包的作用弄明白,就要仔细的阅读这些文档。geotools的 Quickstart 讲的是如何打开一个.shp文件, eclipse版本、IDEA版本的都有。Document有Featur(要素)教程,Geometry(几何)教程,Query(查询)教程等,要注意的是最的新版本可能不支持旧版里的一些内容。
由于我要做的与几何内容联系比较大,所以着重参考了JTS Topology Suite(拓扑套件)类库,这里面的类主要是用来实现具体的几何操作,主要用到了以下三个包:
org.locationtech.jts.operation.union
org.locationtech.jts.operation.buffer
org.locationtech.jts.algorithm (PointLocator)
二、多看例子
一周多的时间,我几乎翻遍了网上所有与geotools有关的博客,之后试着对里面的代码进行理解和仿写。这个阶段获取的信息量非常大,有很多重复的内容,关键是要从中提取出有用的信息点。
三、分析自己项目的具体需求
刚开始领导布置任务的时候是说要导入JSON格式的数据,所以又看了相关的一些知识,包括JSON格式的特点、使用范围以及如何通过Java与javascript对它进行解析与生成。
三、下载、导入jar包,配置maven
这个项目对我来讲非常重要的一点就是学会了maven工具的使用,这个构建工具非常强大,geotools就是默认使用maven来做的。maven重点在于对pom.xml文件的配置,导入jar包后就要添加依赖。
下面是我配置的pom文件:
4.0.0
org.geotools
buffer
1.0-SNAPSHOT
jar
buffer
http://maven.apache.org
UTF-8
19-SNAPSHOT
junit
junit
4.11
test
org.geotools
gt-main
${geotools.version}
org.geotools
gt-shapefile
${geotools.version}
org.geotools
gt-swing
${geotools.version}
org.geotools
gt-api
${geotools.version}
org.geotools
gt-epsg-hsql
${geotools.version}
org.geotools
gt-geometry
${geotools.version}
org.geotools
gt-jts-wrapper
${geotools.version}
org.geotools
gt-geojson
${geotools.version}
maven2-repository.dev.java.net
Java.net repository
http://download.java.net/maven/2
osgeo
Open Source Geospatial Foundation Repository
http://download.osgeo.org/webdav/geotools/
true
boundless
Boundless Maven Repository
http://repo.boundlessgeo.com/main
true
org.apache.maven.plugins
maven-compiler-plugin
1.8
1.8
四、具体实现代码
以前一直在用eclipse,这次做完之后把所有内容都迁到了IDEA,熟悉新IDE也花费了不少时间。二者我觉得都很好,目前的水平也感觉不出来IDEA有网上说的那么神奇,从体验来讲只是UI上的差异,不过有一点很重要,就是IDEA的结构,它没有eclipse中Workspace的概念,在IDEA中,Project是最顶级的结构单元,然后是Module,这类项目一般按照功能划分。
packageorg.geotools;importjava.util.ArrayList;importjava.util.List;importorg.geotools.geometry.jts.JTSFactoryFinder;importcom.vividsolutions.jts.geom.Coordinate;importcom.vividsolutions.jts.geom.Geometry;importcom.vividsolutions.jts.geom.GeometryFactory;importcom.vividsolutions.jts.io.WKTReader;importcom.vividsolutions.jts.algorithm.PointLocator;public classUnionPolygon {public static voidmain(String[] args) {//创建4个多边形
Coordinate[] coordinates1 = newCoordinate[] {new Coordinate(0, 0),new Coordinate(0, 1),new Coordinate(1, 2),new Coordinate(2, 1), //该点在union后会被消去
new Coordinate(2, 0),new Coordinate(0, 0), };
Coordinate[] coordinates2= newCoordinate[] {new Coordinate(1, 0),new Coordinate(1, 1), //该点在union后会被消去
new Coordinate(2, 2),new Coordinate(3, 1),new Coordinate(3, 0),new Coordinate(1, 0)};
Coordinate[] coordinates3= newCoordinate[] {new Coordinate(0, 0),new Coordinate(1, 0),new Coordinate(2, 0),new Coordinate(2, -1),new Coordinate(0, -1),new Coordinate(0, 0), };
Coordinate[] coordinates4= newCoordinate[] {new Coordinate(1, 0),new Coordinate(2, 0),new Coordinate(3, 0),new Coordinate(3, -1),new Coordinate(1, -1),new Coordinate(1, 0)};
GeometryFactory gf=newGeometryFactory();
Geometry g1=gf.createPolygon(coordinates1);
Geometry g2=gf.createPolygon(coordinates2);
Geometry g3=gf.createPolygon(coordinates3);
Geometry g4=gf.createPolygon(coordinates4);//两个合并
Geometry union =g1.union(g2);
Geometry union2=union.union(g3);//多个合并,设置多边形数组,再通过循环依次叠加各个多边形
Geometry[] geos=newGeometry[] {g1,g2,g3,g4};
Geometry allunion= geos[0];for(int i=1; i
allunion=allunion.union(geos[i]);
}
System.out.println(union);
System.out.println(union2);
System.out.println(allunion);//缓冲区建立
Geometry g3buffer=g3.buffer(1); //对第三个多边形加缓冲区
Geometry allunionbuffer=allunion.buffer(1); //对全部合并后的多边形加缓冲区
System.out.println(g3buffer);
System.out.println(allunionbuffer);//点是否在多边形内判断
Coordinate point1 = new Coordinate(1, 1);
PointLocator a=newPointLocator();boolean p1=a.intersects(point1, allunion);if(p1)
System.out.println("point1:"+"该点在多边形内");elseSystem.out.println("point1:"+"该点不在多边形内");
Coordinate point2= new Coordinate(5, 5);
PointLocator b=newPointLocator();boolean p2=b.intersects(point2, allunion);if(p2)
System.out.println("point2:"+"该点在多边形内");elseSystem.out.println("point2:"+"该点不在多边形内");
}
}
五、小总结
做项目的提升速度其实比纯看书是快很多的,因为会碰到很多问题。我的方法是把一天遇到的与内容相关的问题点都记下来,然后再看它们分别属于什么知识范畴,最后安排时间去查阅相关的知识,重要的(比如maven)就按照体系来学习,进行宏观把握,其他的达到能看懂、能理解、会基础操作的水平就行。还有就是多交流吧,能解决很多问题。
说到底,学习就是一个发现问题解决问题的过程,只不过这中间不同人选取的手段方法有一些差异而已。
java多边形合并_geotools实现多边形的合并缓冲区相关推荐
- java多边形合并_碎多边形合并 | SuperMap iDesktop Java
将面积较小的多边形合并到大面积的多边形上. 在数据制作和处理过程中,很可能产生一些细碎的多边形,称之为碎多边形.可以通过"碎多边形合并"功能将这些细碎多边形合并的相邻的大多边形中, ...
- java 合并流_Java Stream 流实现合并操作示例
本文实例讲述了Java Stream 流实现合并操作.分享给大家供大家参考,具体如下: 1. 前言 Java Stream Api提供了很多有用的 Api 让我们很方便将集合或者多个同类型的元素转换为 ...
- java使用poi生成Excel文件并合并单元格
java使用poi生成Excel文件并合并单元格 业务需要根据 分管部门 字段进行合并,现在提供一种思路. controller层 @Inject(target = "/inf ...
- java实现多个mav文件拼接合并成一个mav文件
java实现多个mav文件拼接合并成一个mav文件,绝对有效 解决方法: import java.io.File; import java.io.IOException; import java.io ...
- java下载m3u8视频,解密并合并ts(二)
上一篇 java下载m3u8视频,解密并合并ts(一)--m3u8概述 下一篇java下载m3u8视频,解密并合并ts(三)--代码实现 m3u8链接的获取 样例一:两个m3u8无key 首先在浏览器 ...
- java下载m3u8视频,解密并合并ts(三)
上一篇 java下载m3u8视频,解密并合并ts(二)--获取m3u8链接 编写代码 加载jar包 由于java不支持AES/CBC/PKCS7Padding模式解密,所以我们要借助第一篇下载好的ja ...
- Java合并m3u8_m3u8Download java 下载 m3u8 视频,解密并合并 ts java download m3u8 vide @codeKK Android开源站...
java 下载 m3u8 视频,解密并合并 ts m3u8 链接获取方式以及代码分析请参见: https://blog.csdn.net/qq494257084/article/details/103 ...
- java计算机毕业设计酒店后厨供应商订单合并系统源码+数据库+lw文档+系统
java计算机毕业设计酒店后厨供应商订单合并系统源码+数据库+lw文档+系统 java计算机毕业设计酒店后厨供应商订单合并系统源码+数据库+lw文档+系统 本源码技术栈: 项目架构:B/S架构 开发语 ...
- Java下载海康历史视频并合并转码
Java下载海康历史视频并合并转码 关于上一篇的升级版(补充一下,需要的小伙伴可能更明白点) 有时间补上,目前一直用的OneNote,很少分享了,也不知道好还是不好... function getNo ...
最新文章
- LeetCode中等题之特殊等价字符串组
- FortiGate设置E-mail告警
- PaddleDetection支持的数据格式
- h1、h2、h3标签及strong标签对页面seo的影响
- 您应该在2020年首先学习哪种编程语言? ɐʌɐɾdıɹɔsɐʌɐɾ:ɹǝʍsuɐ
- python调用函数怎么错_在Python中从类调用函数时参数数目错误
- C# 基础-CLR-类型【0】
- 十字链表法和邻接多重表法
- windows QT+VS201环境安装
- [ORA-01033: ORACLE正在初始化或关闭]问题解决方案
- Linux 系统启动与服务管理
- Java基础笔记(初学者适用)
- NLP系列(8)_用可视化解构BERT,从上亿参数中提取出的6种直观模式
- 手机邮箱可以撤回邮件吗_苹果手机邮箱撤回邮件 手机邮箱如何撤回邮件
- 基于MySQL 数据库的审计设计方案
- 个人总结-网络安全学习和CTF必不可少的一些网站
- 华三,思科ACL命令解析
- SMI-S 统一SAN管理
- 被动信息收集:信息收集内容、信息用途、信息收集DNS、DNS信息收集-NSLOOKUP
- 5.2.4 js循环小练习02 6 做学院评奖系统​ 如果数学成绩大于80分并且语文成绩大于80分,获奖学金500元。​如果数学小于30并且语文小于30分,输出重修。 两个数a、b,如果a能被b整除
热门文章
- java 高效计算99乘法表_【九九乘法表】九九乘法表学习攻略 九九乘法表快速记忆小诀窍...
- 星城,你准备好了么?Greenplum走进长沙技术研讨会
- java jmf播放mp3_关于jmf不能播放mp3的问题解决
- 暗影精灵2pro装Linux系统,暗影精灵2不支持linux双系统吗?
- SCPC :普普通通的DP(位运算)
- Eclipse开发环境搭建
- 最新江苏安全员B考试单选练习题库
- ArGIS Engine专题(6)之利用GP水文分析工具实现基于DEM的山脊线提取
- 南京大学交叉培养计算机与金融招生人数,教务处组织召开计算机与金融工程实验班师生见面会...
- 《安富莱嵌入式周报》第269期:2022.06.06--2022.06.12