当前位置:   article > 正文

JTS Geometry Operations(一)_jts distanceop

jts distanceop
Geometry 空间分析方法几何图形操作包
在operation包内,包含buffer、distance、linemerge、overlap、polygonize、predicate、relate、valide八个子包;
分别对应着计算图形的缓冲、距离、线段融合、图形覆盖、多边形化、断言、关联、有效性等的操作。所有的操作针对的都是在geom包中定义的Geometry对象。
由于在计算机中,所有的图形都是离散的点组成,所以所有的操作都是在组成图形的点的集合上进行的.
一个图形(Geometry)的缓冲(buffer)
距离操作(distance)是个二元操作,操作对象Geometry A、B,返回(A)与(B)中距离最近的两个点的距离。
线段的融合(linemerge)是将Geometry A中相互连接的线段进行连接。
图形的覆盖(overlap),在这里不想多说了,自己稀里糊涂的。
多边形化操作(polygonize)对Geometry A进行计算,返回一个多边形(Polygon)。将由许多个点表示的图形,用少量的点来表示,减少图形的信息,即对图形进行降维。
断言(predicate)是一个二维的操作,对Geometry之间的关系进行判断的操作。

关联(relate) 根据DE-9IM(The Dimensionally Extended Nine-Intersection Model),该方法返回两个Geometry A与B的相交矩阵IM(Intersections Matrix)。这个矩阵在计算图形关系上用到。

列举了distance,intersection,union,difference 操作

  1. package com.mapbar.geo.jts.operation;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import org.geotools.geometry.jts.JTSFactoryFinder;
  5. import com.vividsolutions.jts.geom.Coordinate;
  6. import com.vividsolutions.jts.geom.Geometry;
  7. import com.vividsolutions.jts.geom.GeometryFactory;
  8. import com.vividsolutions.jts.geom.LineString;
  9. /**
  10. * Class Operation.java
  11. * Description 几何对象操作
  12. * Company mapbar
  13. * author Chenll E-mail: Chenll@mapbar.com
  14. * Version 1.0
  15. * Date 2012-2-21 上午10:47:47
  16. */
  17. public class Operation {
  18. private GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory( null );
  19. /**
  20. * create a Point
  21. * @param x
  22. * @param y
  23. * @return
  24. */
  25. public Coordinate point(double x,double y){
  26. return new Coordinate(x,y);
  27. }
  28. /**
  29. * create a line
  30. * @return
  31. */
  32. public LineString createLine(List<Coordinate> points){
  33. Coordinate[] coords = (Coordinate[]) points.toArray(new Coordinate[points.size()]);
  34. LineString line = geometryFactory.createLineString(coords);
  35. return line;
  36. }
  37. /**
  38. * 返回(A)与(B)中距离最近的两个点的距离
  39. * @param a
  40. * @param b
  41. * @return
  42. */
  43. public double distanceGeo(Geometry a,Geometry b){
  44. return a.distance(b);
  45. }
  46. /**
  47. * 两个几何对象的交集
  48. * @param a
  49. * @param b
  50. * @return
  51. */
  52. public Geometry intersectionGeo(Geometry a,Geometry b){
  53. return a.intersection(b);
  54. }
  55. /**
  56. * 几何对象合并
  57. * @param a
  58. * @param b
  59. * @return
  60. */
  61. public Geometry unionGeo(Geometry a,Geometry b){
  62. return a.union(b);
  63. }
  64. /**
  65. * 在A几何对象中有的,但是B几何对象中没有
  66. * @param a
  67. * @param b
  68. * @return
  69. */
  70. public Geometry differenceGeo(Geometry a,Geometry b){
  71. return a.difference(b);
  72. }
  73. public static void main(String[] args){
  74. Operation op = new Operation();
  75. //创建一条线
  76. List<Coordinate> points1 = new ArrayList<Coordinate>();
  77. points1.add(op.point(0,0));
  78. points1.add(op.point(1,3));
  79. points1.add(op.point(2,3));
  80. LineString line1 = op.createLine(points1);
  81. //创建第二条线
  82. List<Coordinate> points2 = new ArrayList<Coordinate>();
  83. points2.add(op.point(3,0));
  84. points2.add(op.point(3,3));
  85. points2.add(op.point(5,6));
  86. LineString line2 = op.createLine(points2);
  87. System.out.println(op.distanceGeo(line1,line2));//out 1.0
  88. System.out.println(op.intersectionGeo(line1,line2));//out GEOMETRYCOLLECTION EMPTY
  89. System.out.println(op.unionGeo(line1,line2)); //out MULTILINESTRING ((0 0, 1 3, 2 3), (3 0, 3 3, 5 6))
  90. System.out.println(op.differenceGeo(line1,line2));//out LINESTRING (0 0, 1 3, 2 3)
  91. }
  92. }


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/941064
推荐阅读
相关标签
  

闽ICP备14008679号