热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Esrigeometryapijava学习文档(3)线、多线(Polyline)

线要素是是一个1维的空间数据,每个线要素一组单线(paths),每条单线包含着一组点(n≥2)。这里与OGC、JTS不同的是,Esri更喜欢用一个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.html
http://esri.github.io/geometry-api-java/javadoc/com/esri/core/geometry/Polyline.html

推荐阅读
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
author-avatar
X你好先生
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有