这算是第一次接触开源工具包,说实话刚开始有点不知所措,中途遇到很多问题的时候也感觉头皮发麻,不过很高兴自己还是坚持下来了。

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实现多边形的合并缓冲区相关推荐

  1. java多边形合并_碎多边形合并 | SuperMap iDesktop Java

    将面积较小的多边形合并到大面积的多边形上. 在数据制作和处理过程中,很可能产生一些细碎的多边形,称之为碎多边形.可以通过"碎多边形合并"功能将这些细碎多边形合并的相邻的大多边形中, ...

  2. java 合并流_Java Stream 流实现合并操作示例

    本文实例讲述了Java Stream 流实现合并操作.分享给大家供大家参考,具体如下: 1. 前言 Java Stream Api提供了很多有用的 Api 让我们很方便将集合或者多个同类型的元素转换为 ...

  3. java使用poi生成Excel文件并合并单元格

    java使用poi生成Excel文件并合并单元格        业务需要根据 分管部门 字段进行合并,现在提供一种思路. controller层 @Inject(target = "/inf ...

  4. java实现多个mav文件拼接合并成一个mav文件

    java实现多个mav文件拼接合并成一个mav文件,绝对有效 解决方法: import java.io.File; import java.io.IOException; import java.io ...

  5. java下载m3u8视频,解密并合并ts(二)

    上一篇 java下载m3u8视频,解密并合并ts(一)--m3u8概述 下一篇java下载m3u8视频,解密并合并ts(三)--代码实现 m3u8链接的获取 样例一:两个m3u8无key 首先在浏览器 ...

  6. java下载m3u8视频,解密并合并ts(三)

    上一篇 java下载m3u8视频,解密并合并ts(二)--获取m3u8链接 编写代码 加载jar包 由于java不支持AES/CBC/PKCS7Padding模式解密,所以我们要借助第一篇下载好的ja ...

  7. Java合并m3u8_m3u8Download java 下载 m3u8 视频,解密并合并 ts java download m3u8 vide @codeKK Android开源站...

    java 下载 m3u8 视频,解密并合并 ts m3u8 链接获取方式以及代码分析请参见: https://blog.csdn.net/qq494257084/article/details/103 ...

  8. java计算机毕业设计酒店后厨供应商订单合并系统源码+数据库+lw文档+系统

    java计算机毕业设计酒店后厨供应商订单合并系统源码+数据库+lw文档+系统 java计算机毕业设计酒店后厨供应商订单合并系统源码+数据库+lw文档+系统 本源码技术栈: 项目架构:B/S架构 开发语 ...

  9. Java下载海康历史视频并合并转码

    Java下载海康历史视频并合并转码 关于上一篇的升级版(补充一下,需要的小伙伴可能更明白点) 有时间补上,目前一直用的OneNote,很少分享了,也不知道好还是不好... function getNo ...

最新文章

  1. LeetCode中等题之特殊等价字符串组
  2. FortiGate设置E-mail告警
  3. PaddleDetection支持的数据格式
  4. h1、h2、h3标签及strong标签对页面seo的影响
  5. 您应该在2020年首先学习哪种编程语言? ɐʌɐɾdıɹɔsɐʌɐɾ:ɹǝʍsuɐ
  6. python调用函数怎么错_在Python中从类调用函数时参数数目错误
  7. C# 基础-CLR-类型【0】
  8. 十字链表法和邻接多重表法
  9. windows QT+VS201环境安装
  10. [ORA-01033: ORACLE正在初始化或关闭]问题解决方案
  11. Linux 系统启动与服务管理
  12. Java基础笔记(初学者适用)
  13. NLP系列(8)_用可视化解构BERT,从上亿参数中提取出的6种直观模式
  14. 手机邮箱可以撤回邮件吗_苹果手机邮箱撤回邮件 手机邮箱如何撤回邮件
  15. 基于MySQL 数据库的审计设计方案
  16. 个人总结-网络安全学习和CTF必不可少的一些网站
  17. 华三,思科ACL命令解析
  18. SMI-S 统一SAN管理
  19. 被动信息收集:信息收集内容、信息用途、信息收集DNS、DNS信息收集-NSLOOKUP
  20. 5.2.4 js循环小练习02 6 做学院评奖系统​ 如果数学成绩大于80分并且语文成绩大于80分,获奖学金500元。​如果数学小于30并且语文小于30分,输出重修。 两个数a、b,如果a能被b整除

热门文章

  1. java 高效计算99乘法表_【九九乘法表】九九乘法表学习攻略 九九乘法表快速记忆小诀窍...
  2. 星城,你准备好了么?Greenplum走进长沙技术研讨会
  3. java jmf播放mp3_关于jmf不能播放mp3的问题解决
  4. 暗影精灵2pro装Linux系统,暗影精灵2不支持linux双系统吗?
  5. SCPC :普普通通的DP(位运算)
  6. Eclipse开发环境搭建
  7. 最新江苏安全员B考试单选练习题库
  8. ArGIS Engine专题(6)之利用GP水文分析工具实现基于DEM的山脊线提取
  9. 南京大学交叉培养计算机与金融招生人数,教务处组织召开计算机与金融工程实验班师生见面会...
  10. 《安富莱嵌入式周报》第269期:2022.06.06--2022.06.12