GeoTools应用-(JTS Geometry Operations)(一)

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

 * 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)
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值