Esri geometry api java 学习文档 (3) 线、多线 (Polyline)

线要素是是一个1维的空间数据,每个线要素一组单线(paths),每条单线包含着一组点(n≥2)。

这里与OGC、JTS不同的是,Esri更喜欢用一个Polyline表示多线元素,单线 = 只有一个元素的多线,而不喜欢把Line和MultiLine单独分开。

线要素由一组点要素组成,这些点要素被分为三类:

Boundary: 边界点

Interior: 内部点

Exterior: 外部点

如图:

边界点就是 线要素的开始点和结束点;

内部点就是 线要素上非开始点和结束点的其他点;

外部点就是 非内部点且非边界点的点集.

那么比较复杂的线要素是怎么判断这三种点呢?

例如:

这里绿色点连接着4条线段,是偶数,所以它不是边界点

这里绿色点连接着5条线段,是奇数,所以它是边界点。

此外还有一个特殊概念Valid polyline(OGC\JTS里面叫LinearRing)

Valid polyline:

1. Valid polyline是一条线段(n≥2)

2. Valid polyline是简单曲线(线段不会自相交)

Polyline 的初始定义:(这个跟之前Point大同小异我把它放在最后了,有需要请拉到下面)

Polyline 的常用方法:

新增:

  p1.startPath(6.15, 8.0);  //开始勾勒单线

  p1.lineTo(7.15, 9.0);  //勾勒下一个点

  p1.add(p2, true);   //在P1后面新增另一个Polyline(P2)的全部单线

  p1.addPath(p2,0,true);  //在P1后面新增另一个Polyline(P2)第“0”个单线

  p1.addEnvelope(e,true);  //在P1后面新增另一个Envelope

  p1.addSegmentsFromPath(p2,0,1,2,true);  //在p1最后一个单线后面加入p2第0个单线的,从第1个点开始延伸2个点的这个线段

  以上true/false表示顺时针/逆时针输入

对 Polyline 整体的处理:

  p1.equals(p2)  //判断是否拓扑相等

p1.getDimension();   //判断维度

p1.calculateLength2D();  //计算长度(°)(仅限WGS84坐标系下)

p1.copyTo(p2);  //复制到p2

p1.isEmpty();  //判断是否为空

Transformation2D transformation = new Transformation2D();

p1.applyTransformation( transformation );  //做二维仿射变换

  p1.estimateMemorySize();  //判断内存

对 Polyline 中 Envelope 的处理:

  p1.queryEnvelope(e);  //查询p1中所有的Envelope

对 Polyline 中内部单线(path)的处理:

  p1.getPathCount();  //单线数量

p1.getPathStart(0);  //获得所有单线开始点

p1.getPathEnd(0);  //获得所有单线结束点(流向图经常用他们)

  p1.getBoundary();  //得到Boundary(这里是开始点+结束点),对点要素来说是自身,对面要素来说是轮廓线

p1.getPathIndexFromPointIndex(0);  //读取第0条单线

p1.getPathSize(0);  //读取第0条单线的节点数

  p1.calculatePathLength2D(0);  //读取第0条单线的二维长度(°)(WGS84)

  p1.isClosedPath(0);  //将第“0”条单线闭合(多用于成面)

p1.closeAllPaths();  //将所有单线闭合

p1.closePathWithLine();  //...

  p1.removePath(0);  //删除第0条单线

对 Polyline 中内部单线(path)内线段(Segment)的处理:

  SegmentIterator b = p1.querySegmentIterator();  //线段遍历器

对 Polyline 中点的处理:

  p1.getPointCount();  //点个数

  p1.vertex_count(p1);  //顶点个数

  

  Point[] pz = new Point[p1.getPointCount()];

  p1.queryCoordinates(pz);  //读取所有点到点数组pz中

  p1.getPoint(0);  //读取某个点

  p1.removePoint(0,0);  //删除点(0,0)

附:

Polyline 的初始定义:

 1 static Polyline createPolyline1() {
 2
 3         Polyline line = new Polyline();
 4
 5         // Path 1
 6         line.startPath(6.9, 9.1);
 7         line.lineTo(7, 8.8);
 8
 9         // Path 2
10         line.startPath(6.8, 8.8);
11         line.lineTo(7, 9);
12         line.lineTo(7.2, 8.9);
13         line.lineTo(7.4, 9);
14
15         // Path 3
16         line.startPath(7.4, 8.9);
17         line.lineTo(7.25, 8.6);
18         line.lineTo(7.15, 8.8);
19
20         return line;
21     }

2.读取JSON数据

OperatorImportFromJson.local().executeexecute(Geometry.Type type, String string);
Type :Geometry.Type寻找,这里是polyline
string :JSON字符串
 1 static Polyline createPolygonFromJson() throws JsonParseException, IOException {
 2
 3         String jsonString = "{\"paths\":[[[6.8,8.8],[7,9],[7.2,8.9],[7.4,9]],"
 4                           + "[[7.4,8.9],[7.25,8.6],[7.15,8.8]],[[6.9, 9.1],[7, 8.8]]],"
 5                           + "\"spatialReference\":{\"wkid\":4326}}";
 6
 7         MapGeometry mapGeom = OperatorImportFromJson.local().execute(Geometry.Type.Polyline, jsonString);
 8
 9         return (Polyline)mapGeom.getGeometry();
10     }

3.读取GeoJSON数据

OperatorImportFromGeoJson.local().execute(int importFlags, Geometry.Type type, String geoJsonString, ProgressTracker progressTracker);
importFlags :

    geoJsonImportDefaults = 0;      默认WGS84坐标系
    geoJsonImportNonTrusted = 2;     不可信点
    geoJsonImportSkipCRS = 8;       跳过CRS
    geoJsonImportNoWGS84Default = 16; 非WGS84坐标系

type :Geometry.Type寻找,这里是polyline
geoJsonString :GeoJSON字符串
progressTracker :null
 1 static Polyline createPolylineFromGeoJson() throws JsonParseException, IOException {
 2
 3         String geoJsonString = "{\"type\":\"MultiLineString\","
 4                              + "\"coordinates\":[[[6.8,8.8],[7,9],[7.2,8.9],[7.4,9]],"
 5                              + "[[7.4,8.9],[7.25,8.6],[7.15,8.8]],[[6.9, 9.1],[7, 8.8]]],"
 6                              + "\"crs\":\"EPSG:4326\"}";
 7
 8         MapGeometry mapGeom = OperatorImportFromGeoJson.local().execute(GeoJsonImportFlags.geoJsonImportDefaults, Geometry.Type.Polyline, geoJsonString, null);
 9
10         return (Polyline)mapGeom.getGeometry();
11     }

4.读取WKT数据

OperatorImportFromWkt.local().execute(int import_flags, Geometry.Type type,String wkt_string, ProgressTracker progress_tracker);
import_flags :同上
Type :同上
wkt_string :WKT字符串
progressTracker :null
1 static Polyline createPolylineFromWKT() throws JsonParseException, IOException {
2
3         String wktString = "MULTILINESTRING ((6.9 9.1,7 8.8),(6.8 8.8,7 9,7.2 8.9,7.4 9),(7.4 8.9,7.25 8.6,7.15 8.8))";
4         Geometry geom = OperatorImportFromWkt.local().execute(WktImportFlags.wktImportDefaults, Geometry.Type.Polyline, wktString, null);
5
6         return (Polyline)geom;
7     }
8 }

参考:http://esri.github.io/geometry-api-java/doc/Polyline.htmlhttp://esri.github.io/geometry-api-java/javadoc/com/esri/core/geometry/Polyline.html

原文地址:https://www.cnblogs.com/17th-trackwalker/p/10301613.html

时间: 2024-10-29 17:26:11

Esri geometry api java 学习文档 (3) 线、多线 (Polyline)的相关文章

Esri geometry api java 学习文档 (2) 几何图形 (Geometry)与数据结构

Geometry是Esri geometry api中所有类的父类,它定义了所有几何数据的存储结构 与 基本方法. 无论派生出的任何点.线.面等要素都要遵循Geometry定下的基本规则,那我们就来看一下Geometry到底使用了什么思路?搭建了什么样的结构? 上图是Esri Geometry的子类们,与下图OGC 对Geometry 的定义相对比,Esri 使用顶点Vertex(并非是Point)来构建多点的要素,先将"多点要素"."域"."线"

ORACLE官网JAVA学习文档

Trails Covering the Basics 1 Getting Started 1.1 The Java Technology Phenomenon 1.1.1 About the Java Technology The Java Programming Language ?? Figure 1 an overview of the software development process java文件以.java作为后缀 源文件被javac compiler编译为.class 文件

java8 JDK1.8 API 中文 翻译版 java帮助文档

来源 http://blog.csdn.net/qw599186875/article/details/52265995?ticket=ST-213719-sl0mP1mtz9GcbY44tTbE-passport.csdn.net java 1.6 帮助文档 中文 链接:http://download.csdn.net/detail/qw599186875/9608735 英文 Java1.8 帮助文档 英文 中文 – 谷歌版 在线版: https://blog.fondme.cn/apido

Openstack python api 学习文档

Openstack python api 学习文档 转载请注明http://www.cnblogs.com/juandx/p/4953191.html 因为需要学习使用api接口调用openstack,所以上一篇写了一些使用openstack的纯api调用的方法, 但是openstack还提供了更好的python的api,只需要python的包即可,感觉更好使用. 对于compute的api,包是放在了/usr/lib/python2.7/site-packages/novaclient/目录,

Activit最入门学习文档,从如何创建项目开始共20章,看完,任何Java项目集成无压力

Activit流程引擎 本人水平,刚自学java一个多月,然后看视频做的笔记,全部傻瓜式截图教程,反正我学习之前没在网上搜索到任何小白教程, Activit官方的教程真心看不懂,因为都是文字 没具体创建步奏,所以对新手来说很无奈, 然后吧,就把自己的学习经验贡献出来啦 最小白的文档,看完之后,集成到任何java项目中都无压力,我最后的是做了个Jfinal集成,估计这是网上搜到最全的容易懂的入门学习文档,本人自学java一个月,反正我看官方例子什么的都看不懂,然后各搜素也没收到教程视频,还好有别人

优于 swagger 的 java markdown 文档生成框架-01-入门使用

设计初衷 节约时间 Java 文档一直是一个大问题. 很多项目不写文档,即使写文档,对于开发人员来说也是非常痛苦的. 不写文档的缺点自不用多少,手动写文档的缺点也显而易见: 非常浪费时间,而且会出错. 无法保证及时更新.代码已经变了,但是文档还要同步修改.需要强制人来维护这一种一致性.这很难. 为什么不是 swagger-ui java 的文档有几类: jdk 自带的 doc 生成.这个以前实践给别人用过,别人用 C#,看到 java 的默认文档感觉很痛苦. 就算是我们 java 开发者,也很讨

Mybatis学习文档

Mybatis学习文档 Mybatis是持久层框架类似于Hibernate的orm持久层框架 1.JDBC访问数据库存在的问题 频繁创建和打开.关闭数据链接,太消耗资源 Sql语句存在硬编码,不利于维护 Sql参数设置硬编码,不利于维护 结果集获取与遍历复杂,存在硬编码,不利于维护,期望查询后返回一个java对象 2.Mybatis介绍 前身是apache下的开源项目,2010有aspache software foundation 迁移到了google code ,并且改名为Mybatis,2

JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版下载

JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版下载JDK(Java Development Kit,Java开发包,Java开发工具)是一个写Java的applet和应用程序的程序开发环境.它由一个处于操作系统层之上的运行环境还有开发者编译,调试和运行用Java语言写的applet和应用程序所需的工具组成. JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品.自从Java推出以来,JDK已经成为使用最广泛

solr学习文档之高亮

在<solr学习文档之添加分词词库>一文中,我们学习了如何对一个词组进行分词提取,这一章我们将会使用到分词词库,并介绍如何进行高亮展现 在此之前,我们先了解一下高亮的几个参数 hl:是否开启高亮组件,true为开启,false为不开启 hl.fl:需要开启的高亮字段,多个可用逗号隔开 hl.simple.pre:高亮字段前缀 hl.simple.post:高亮字段后缀 (其他的暂不介绍,想知道的可自行百度) 想要进行高亮站下,需要在schema.xml中将你的字段名(如topicContent