空间数据模型
(1)、JTS Geometry model
(2)、ISO Geometry model (Geometry Plugin and JTS Wrapper Plugin)
GeoTools has two implementations of these interfaces:
Geometry Plugin a port of JTS 1.7 to the ISO Geometry interfaces
(1) JTS提供了如下的空间数据类型
Point
MultiPoint
LineString
LinearRing 封闭的线条
MultiLineString 多条线
Polygon
MultiPolygon
(1)、JTS Geometry model
(2)、ISO Geometry model (Geometry Plugin and JTS Wrapper Plugin)
GeoTools has two implementations of these interfaces:
Geometry Plugin a port of JTS 1.7 to the ISO Geometry interfaces
JTS Wrapper Plugin an implementation that delegates all the work to JTS
JTS包结构
系(linearref包)、计算交点(noding包)、几何图形操作(operation包)、平面图(planargraph包)、多边形化(polygnize包)、精度(precision)、工具(util包)
(1) JTS提供了如下的空间数据类型
Point
MultiPoint
LineString
LinearRing 封闭的线条
MultiLineString 多条线
Polygon
MultiPolygon
GeometryCollection 包括点,线,面
(2) 支持接口
Coordinate
Coordinate(坐标)是用来存储坐标的轻便的类。它不同于点,点是Geometry的子类。不像模范Point的对象(包含额外的信息,例如一个信包,一个精确度模型和空间参考系统信息),Coordinate只包含纵座标值和存取方法。
Envelope(矩形)
一个具体的类,包含一个最大和最小的x 值和y 值。
GeometryFactory
GeometryFactory提供一系列的有效方法用来构造来自Coordinate类的Geometry对象。支持接口
- package com.mapbar.geo.jts;
- import org.geotools.geometry.jts.JTSFactoryFinder;
- import com.vividsolutions.jts.geom.Coordinate;
- import com.vividsolutions.jts.geom.Geometry;
- import com.vividsolutions.jts.geom.GeometryCollection;
- import com.vividsolutions.jts.geom.GeometryFactory;
- import com.vividsolutions.jts.geom.LineString;
- import com.vividsolutions.jts.geom.LinearRing;
- import com.vividsolutions.jts.geom.Point;
- import com.vividsolutions.jts.geom.Polygon;
- import com.vividsolutions.jts.geom.MultiPolygon;
- import com.vividsolutions.jts.geom.MultiLineString;
- import com.vividsolutions.jts.geom.MultiPoint;
- import com.vividsolutions.jts.io.ParseException;
- import com.vividsolutions.jts.io.WKTReader;
- /**
- * Class GeometryDemo.java
- * Description Geometry 几何实体的创建,读取操作
- * Company mapbar
- * author Chenll E-mail: Chenll@mapbar.com
- * Version 1.0
- * Date 2012-2-17 上午11:08:50
- */
- public class GeometryDemo {
- private GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory( null );
- /**
- * create a point
- * @return
- */
- public Point createPoint(){
- Coordinate coord = new Coordinate(109.013388, 32.715519);
- Point point = geometryFactory.createPoint( coord );
- return point;
- }
- /**
- * create a point by WKT
- * @return
- * @throws ParseException
- */
- public Point createPointByWKT() throws ParseException{
- WKTReader reader = new WKTReader( geometryFactory );
- Point point = (Point) reader.read("POINT (109.013388 32.715519)");
- return point;
- }
- /**
- * create multiPoint by wkt
- * @return
- */
- public MultiPoint createMulPointByWKT()throws ParseException{
- WKTReader reader = new WKTReader( geometryFactory );
- MultiPoint mpoint = (MultiPoint) reader.read("MULTIPOINT(109.013388 32.715519,119.32488 31.435678)");
- return mpoint;
- }
- /**
- *
- * create a line
- * @return
- */
- public LineString createLine(){
- Coordinate[] coords = new Coordinate[] {new Coordinate(2, 2), new Coordinate(2, 2)};
- LineString line = geometryFactory.createLineString(coords);
- return line;
- }
- /**
- * create a line by WKT
- * @return
- * @throws ParseException
- */
- public LineString createLineByWKT() throws ParseException{
- WKTReader reader = new WKTReader( geometryFactory );
- LineString line = (LineString) reader.read("LINESTRING(0 0, 2 0)");
- return line;
- }
- /**
- * create multiLine
- * @return
- */
- public MultiLineString createMLine(){
- Coordinate[] coords1 = new Coordinate[] {new Coordinate(2, 2), new Coordinate(2, 2)};
- LineString line1 = geometryFactory.createLineString(coords1);
- Coordinate[] coords2 = new Coordinate[] {new Coordinate(2, 2), new Coordinate(2, 2)};
- LineString line2 = geometryFactory.createLineString(coords2);
- LineString[] lineStrings = new LineString[2];
- lineStrings[0]= line1;
- lineStrings[1] = line2;
- MultiLineString ms = geometryFactory.createMultiLineString(lineStrings);
- return ms;
- }
- /**
- * create multiLine by WKT
- * @return
- * @throws ParseException
- */
- public MultiLineString createMLineByWKT()throws ParseException{
- WKTReader reader = new WKTReader( geometryFactory );
- MultiLineString line = (MultiLineString) reader.read("MULTILINESTRING((0 0, 2 0),(1 1,2 2))");
- return line;
- }
- /**
- * create a polygon(多边形) by WKT
- * @return
- * @throws ParseException
- */
- public Polygon createPolygonByWKT() throws ParseException{
- WKTReader reader = new WKTReader( geometryFactory );
- Polygon polygon = (Polygon) reader.read("POLYGON((20 10, 30 0, 40 10, 30 20, 20 10))");
- return polygon;
- }
- /**
- * create multi polygon by wkt
- * @return
- * @throws ParseException
- */
- public MultiPolygon createMulPolygonByWKT() throws ParseException{
- WKTReader reader = new WKTReader( geometryFactory );
- MultiPolygon mpolygon = (MultiPolygon) reader.read("MULTIPOLYGON(((40 10, 30 0, 40 10, 30 20, 40 10),(30 10, 30 0, 40 10, 30 20, 30 10)))");
- return mpolygon;
- }
- /**
- * create GeometryCollection contain point or multiPoint or line or multiLine or polygon or multiPolygon
- * @return
- * @throws ParseException
- */
- public GeometryCollection createGeoCollect() throws ParseException{
- LineString line = createLine();
- Polygon poly = createPolygonByWKT();
- Geometry g1 = geometryFactory.createGeometry(line);
- Geometry g2 = geometryFactory.createGeometry(poly);
- Geometry[] garray = new Geometry[]{g1,g2};
- GeometryCollection gc = geometryFactory.createGeometryCollection(garray);
- return gc;
- }
- /**
- * create a Circle 创建一个圆,圆心(x,y) 半径RADIUS
- * @param x
- * @param y
- * @param RADIUS
- * @return
- */
- public Polygon createCircle(double x, double y, final double RADIUS){
- final int SIDES = 32;//圆上面的点个数
- Coordinate coords[] = new Coordinate[SIDES+1];
- for( int i = 0; i < SIDES; i++){
- double angle = ((double) i / (double) SIDES) * Math.PI * 2.0;
- double dx = Math.cos( angle ) * RADIUS;
- double dy = Math.sin( angle ) * RADIUS;
- coords[i] = new Coordinate( (double) x + dx, (double) y + dy );
- }
- coords[SIDES] = coords[0];
- LinearRing ring = geometryFactory.createLinearRing( coords );
- Polygon polygon = geometryFactory.createPolygon( ring, null );
- return polygon;
- }
- /**
- * @param args
- * @throws ParseException
- */
- public static void main(String[] args) throws ParseException {
- GeometryDemo gt = new GeometryDemo();
- Polygon p = gt.createCircle(0, 1, 2);
- //圆上所有的坐标(32个)
- Coordinate coords[] = p.getCoordinates();
- for(Coordinate coord:coords){
- System.out.println(coord.x+","+coord.y);
- }
- }
- }