免费推广渠道有哪些,百度seo刷排名网址,php网站代做,网站建设维护职责简介
JTS是加拿大的 Vivid Solutions公司做的一套开放源码的 Java API。它提供了一套空间数据操作的核心算法。为在兼容OGC标准的空间对象模型中进行基础的几何操作提供2D空间谓词API。
操作 表示Geometry对象 Geometry类型介绍见另一篇文章#xff1a;WKT WKB和GeoJSON pa…简介
JTS是加拿大的 Vivid Solutions公司做的一套开放源码的 Java API。它提供了一套空间数据操作的核心算法。为在兼容OGC标准的空间对象模型中进行基础的几何操作提供2D空间谓词API。
操作 表示Geometry对象 Geometry类型介绍见另一篇文章WKT WKB和GeoJSON package com.alibaba.autonavi;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;public class GeometryDemo {private GeometryFactory geometryFactory new GeometryFactory();/*** 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[SIDES1];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);}}
}Geometry之间的关系 支持的空间操作包括
相等(Equals)几何形状拓扑上相等。脱节(Disjoint)几何形状没有共有的点。相交(Intersects)几何形状至少有一个共有点区别于脱节接触(Touches)几何形状有至少一个公共的边界点但是没有内部点。交叉(Crosses)几何形状共享一些但不是所有的内部点。内含(Within)几何形状A的线都在几何形状B内部。包含(Contains)几何形状B的线都在几何形状A内部区别于内含重叠(Overlaps)几何形状共享一部分但不是所有的公共点而且相交处有他们自己相同的区域。
package com.alibaba.autonavi;import com.vividsolutions.jts.geom.*;
import com.vividsolutions.jts.io.ParseException;
import com.vividsolutions.jts.io.WKTReader;/*** gemotry之间的关系**/
public class GeometryRelated {private GeometryFactory geometryFactory new GeometryFactory();/*** 两个几何对象是否是重叠的* return* throws ParseException*/public boolean equalsGeo() throws ParseException{WKTReader reader new WKTReader( geometryFactory );LineString geometry1 (LineString) reader.read(LINESTRING(0 0, 2 0, 5 0));LineString geometry2 (LineString) reader.read(LINESTRING(5 0, 0 0));return geometry1.equals(geometry2);//true}/*** 几何对象没有交点(相邻)* return* throws ParseException*/public boolean disjointGeo() throws ParseException{WKTReader reader new WKTReader( geometryFactory );LineString geometry1 (LineString) reader.read(LINESTRING(0 0, 2 0, 5 0));LineString geometry2 (LineString) reader.read(LINESTRING(0 1, 0 2));return geometry1.disjoint(geometry2);}/*** 至少一个公共点(相交)* return* throws ParseException*/public boolean intersectsGeo() throws ParseException{WKTReader reader new WKTReader( geometryFactory );LineString geometry1 (LineString) reader.read(LINESTRING(0 0, 2 0, 5 0));LineString geometry2 (LineString) reader.read(LINESTRING(0 0, 0 2));Geometry interPoint geometry1.intersection(geometry2);//相交点System.out.println(interPoint.toText());//输出 POINT (0 0)return geometry1.intersects(geometry2);}/*** 判断以x,y为坐标的点point(x,y)是否在geometry表示的Polygon中* param x* param y* param geometry wkt格式* return*/public boolean withinGeo(double x,double y,String geometry) throws ParseException {Coordinate coord new Coordinate(x,y);Point point geometryFactory.createPoint( coord );WKTReader reader new WKTReader( geometryFactory );Polygon polygon (Polygon) reader.read(geometry);return point.within(polygon);}/*** param args* throws ParseException */public static void main(String[] args) throws ParseException {GeometryRelated gr new GeometryRelated();System.out.println(gr.equalsGeo());System.out.println(gr.disjointGeo());System.out.println(gr.intersectsGeo());System.out.println(gr.withinGeo(5,5,POLYGON((0 0, 10 0, 10 10, 0 10,0 0))));}}