import
com.vividsolutions.jts.geom.*
;
import
com.vividsolutions.jts.io.ParseException;
import
com.vividsolutions.jts.io.WKTReader;
* gemotry之间的关系
*
@author
xingxing.dxx
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))"
));
关系分析有如下几种
import
com.vividsolutions.jts.geom.Coordinate;
import
com.vividsolutions.jts.geom.Geometry;
import
com.vividsolutions.jts.geom.GeometryFactory;
import
com.vividsolutions.jts.geom.LineString;
* gemotry之间的关系分析
*
@author
xingxing.dxx
public
class
Operation {
private
GeometryFactory geometryFactory =
new
GeometryFactory();
* 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指定距离内的多边形和多多边形
*
@param
a
*
@param
distance
*
@return
public
Geometry bufferGeo(Geometry a,
double
distance) {
return
a.buffer(distance);
* 返回(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)