关联(relate) 根据DE-9IM(The Dimensionally Extended Nine-Intersection Model),该方法返回两个Geometry A与B的相交矩阵IM(Intersections Matrix)。这个矩阵在计算图形关系上用到。
列举了distance,intersection,union,difference 操作
package com.mapbar.geo.jts.operation; import java.util.ArrayList; import java.util.List; import org.geotools.geometry.jts.JTSFactoryFinder; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryFactory; import com.vividsolutions.jts.geom.LineString; /** * Class Operation.java * Description 几何对象操作 * Company mapbar * author Chenll E-mail: [email protected] * Version 1.0 * Date 2012-2-21 上午10:47:47 */ public class Operation { private GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory( null ); /** * create a Point * @param x * @param y * @return */ public Coordinate point(double x,double y){ return new Coordinate(x,y); } /** * create a line * @return */ public LineString createLine(List<Coordinate> points){ Coordinate[] coords = (Coordinate[]) points.toArray(new Coordinate[points.size()]); LineString line = geometryFactory.createLineString(coords); return line; } /** * 返回(A)与(B)中距离最近的两个点的距离 * @param a * @param b * @return */ public double distanceGeo(Geometry a,Geometry b){ return a.distance(b); } /** * 两个几何对象的交集 * @param a * @param b * @return */ public Geometry intersectionGeo(Geometry a,Geometry b){ return a.intersection(b); } /** * 几何对象合并 * @param a * @param b * @return */ public Geometry unionGeo(Geometry a,Geometry b){ return a.union(b); } /** * 在A几何对象中有的,但是B几何对象中没有 * @param a * @param b * @return */ public Geometry differenceGeo(Geometry a,Geometry b){ return a.difference(b); } public static void main(String[] args){ Operation op = new Operation(); //创建一条线 List<Coordinate> points1 = new ArrayList<Coordinate>(); points1.add(op.point(0,0)); points1.add(op.point(1,3)); points1.add(op.point(2,3)); LineString line1 = op.createLine(points1); //创建第二条线 List<Coordinate> points2 = new ArrayList<Coordinate>(); points2.add(op.point(3,0)); points2.add(op.point(3,3)); points2.add(op.point(5,6)); LineString line2 = op.createLine(points2); System.out.println(op.distanceGeo(line1,line2));//out 1.0 System.out.println(op.intersectionGeo(line1,line2));//out GEOMETRYCOLLECTION EMPTY System.out.println(op.unionGeo(line1,line2)); //out MULTILINESTRING ((0 0, 1 3, 2 3), (3 0, 3 3, 5 6)) System.out.println(op.differenceGeo(line1,line2));//out LINESTRING (0 0, 1 3, 2 3) } }