Java(Spatial)

原创
2017/11/30 00:09
阅读数 72

空间数据模型
(1) JTS Geometry model 
(2) ISO Geometry model (Geometry Plugin and JTS Wrapper Plugin in JTS)
  
JTS包结构
  系(linearref包)
  计算交点(noding包)
  几何图形操作(operation包)
  平面图(planargraph包)
  多边形化(polygnize包)
  精度(precision)
  工具(util包)

JTS Geometry model
  (1) JTS提供了如下的空间数据类型
       Point     
       MultiPoint
       LineString     
       LinearRing  封闭的线条
       MultiLineString    多条线
       Polygon
       MultiPolygon         
       GeometryCollection  包括点,线,面
  (2) 支持接口
      Coordinate
         Coordinate(坐标)是用来存储坐标的轻便的类。它不同于点,点是Geometry的子类。不像模范Point的对象(包含额外的信息,例如一个信包,一个精确度模型和空间参考系统信息),Coordinate只包含纵座标值和存取方法。
      Envelope(矩形)
         一个具体的类,包含一个最大和最小的x 值和y 值。
      GeometryFactory
         GeometryFactory提供一系列的有效方法用来构造来自Coordinate类的Geometry对象

拓扑关系

相等(Equals):几何形状拓扑上相等。
脱节(Disjoint):几何形状没有共有的点。
相交(Intersects):几何形状至少有一个共有点(区别于脱节)
接触(Touches):几何形状有至少一个公共的边界点,但是没有内部点。
交叉(Crosses):几何形状共享一些但不是所有的内部点。
内含(Within):几何形状A的线都在几何形状B内部。
包含(Contains):几何形状B的线都在几何形状A内部(区别于内含)
重叠(Overlaps):几何形状共享一部分但不是所有的公共点,而且相交处有他们自己相同的区域。

拓扑分析

缓冲区分析(Buffer) 包含所有的点在一个指定距离内的多边形和多多边形
凸壳分析(ConvexHull) 包含几何形体的所有点的最小凸壳多边形(外包多边形)
交叉分析(Intersection) 交叉操作就是多边形AB中所有共同点的集合。
联合分析(Union) AB的联合操作就是AB所有点的集合。
差异分析(Difference) AB形状的差异分析就是A里有B里没有的所有点的集合。
对称差异分析(SymDifference) AB形状的对称差异分析就是位于A中或者B中但不同时在AB中的所有点的集合

 

pom.xm

<!-- https://mvnrepository.com/artifact/com.vividsolutions/jts -->
<dependency>
    <groupId>com.vividsolutions</groupId>
    <artifactId>jts</artifactId>
    <version>1.13</version>
</dependency>

XXX.java  

Coordinate[] coordinates1 = new Coordinate[]{  
        new Coordinate(117.2,34.8),new Coordinate(122.2,34.8),  
        new Coordinate(122.2,31.5),new Coordinate(117.2,31.5),new Coordinate(117.2,34.8)  
};  
Coordinate[] coordinates2 = new Coordinate[]{  
        new Coordinate(118.9,33.8),new Coordinate(120.8,33.8),  
        new Coordinate(120.8,32.6),new Coordinate(118.9,32.6),new Coordinate(118.9,33.8)  
};  
Geometry g1 = new GeometryFactory().createPolygon(coordinates1);  
Geometry g2 = new GeometryFactory().createPolygon(coordinates2);  
  
boolean isIter = g1.intersects(g2);  

if(isIter)
  System.out.println("相交");  
else 
  System.out.println("不相交");

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部