Geotools依赖的开源项目:
- JTS:JTS是加拿大的 Vivid Solutions 做的一套开放源码的 Java API。它提供了一套空间数据操作的核心算法,为在兼容OGC标准的空间对象模型中进行基础的几何操作提供2D空间谓词API。
- GeoAPI:GeoAPI为OpenGIS规范提供一组Java接口。
public class 创建shape要素 {
/**
* GEOGCS // 空间参考系统
* [
* "GCS_WGS_1984", // 地理坐标系名称
* 采用的大地基准面为“D_WGS_1984”,该基准面近似椭球体的长轴为 6378137.0 米、扁率为 298.257223563
* DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],
* PRIMEM["Greenwich",0.0], // 以格林威治 0 度经线为起始经线
* UNIT["Degree",0.0174532925199433], // 地图单位为度,该单位的转换因子 为 0.0174532925199433(π/180)
* AUTHORITY["EPSG",4326] // 该坐标系统在EPSG中的编码为“4326”
* ]
*/
/**
* PROJCS // “PROJCS”代表这是一个投影坐标系
* [
* "WGS_1984_Web_Mercator_Auxiliary_Sphere",
* GEOGCS
* [
* "GCS_WGS_1984", // 投影坐标系中必然会包括一个地理坐标系,这里的地理坐标系就是“GCS_WGS_1984”
* DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],
* PRIMEM["Greenwich",0.0],
* UNIT["Degree",0.0174532925199433]
* ],
* PROJECTION["Mercator_Auxiliary_Sphere"], // 采用投影的名称
* PARAMETER["False_Easting",0.0], // 投影坐标系以 0 度经线为中央经线进行投影;
* PARAMETER["False_Northing",0.0],
* PARAMETER["Central_Meridian",0.0],
* PARAMETER["Standard_Parallel_1",0.0],
* PARAMETER["Auxiliary_Sphere_Type",0.0],
* UNIT["Meter",1.0], // 坐标系的单位为米(显然,转换因子就为 1.0)
* AUTHORITY["EPSG",3857]
* ]
*/
/**
* 1.提供了一套空间数据操作的核心算法
* 2.为了创建一个几何对象,我们不能直接new()一个出来,需要使用JTS提供的对象 GeometryFactory ;
*/
public static void main(String[] args) throws Exception {
// createPoint();
// createPointByWKT();
// createMultiPoint();
// createMultiPointByWKT();
LineString lineString = createLineString();
// createLineStringByWKT();
Polygon polygon = createPolygon();
// createPolygonByWKT();
// createMultiLineString();
Geometry intersection = polygon.intersection( lineString );
System.out.println(intersection);
}
// *****************Creating a Point 创建点*****************
private static void createPoint(){
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
Coordinate coord = new Coordinate(1, 1);
Point point = geometryFactory.createPoint(coord);
System.out.println(point);
}
private static void createPointByWKT() throws ParseException {
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
WKTReader reader = new WKTReader(geometryFactory);
Point point = (Point) reader.read("POINT (1 1)");
System.out.println(point);
}
/**
* GeometryFactory#createMultiPoint(Point[]);
* GeometryFactory#createMultiPoint(Coordinate[]);
* GeometryFactory#createMultiPoint(CoordinateSequence);
*/
private static void createMultiPoint(){
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
CoordinateSequence coordinateSequence = new CoordinateSequence2D(1, 1,2,2,3,3);
MultiPoint multiPoint = geometryFactory.createMultiPoint(coordinateSequence);
System.out.println(multiPoint);
}
// *******************Creating a LineString 创建线字符串********************
private static LineString createLineString(){
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
Coordinate[] coordinates = new Coordinate[] {new Coordinate(0, 2), new Coordinate(2, 0), new Coordinate(8, 6) };
LineString line = geometryFactory.createLineString(coordinates);
System.out.println(line);
return line;
}
private static void createLineStringByWKT() throws ParseException {
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
WKTReader reader = new WKTReader( geometryFactory );
LineString line = (LineString) reader.read("LINESTRING(0 2, 2 0, 8 6)");
System.out.println(line);
}
private static void createMultiLineString(){
GeometryFactory geometryFactory = new GeometryFactory();
// GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
LineString[] lineStrings = {createLineString()};
MultiLineString multiLineString = geometryFactory.createMultiLineString(lineStrings);
System.out.println(multiLineString);
}
//**********************Creating a Polygon 创建多边形 ******************
private static Polygon createPolygon(){
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
Coordinate[] coords = new Coordinate[] {new Coordinate(4, 0), new Coordinate(2, 2), new Coordinate(4, 4), new Coordinate(6, 2), new Coordinate(4, 0) };
LinearRing ring = geometryFactory.createLinearRing( coords );
// LinearRing holes[] = null;
// 两个参数,ring定义了多边形的外边界,holes代表一个洞的边界点。洞是位于多边形内部的空白区域。
Polygon polygon = geometryFactory.createPolygon(ring, null );
System.out.println(polygon);
return polygon;
}
private static void createPolygonByWKT() throws ParseException {
GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory( null );
WKTReader reader = new WKTReader( geometryFactory );
Polygon polygon = (Polygon) reader.read("POLYGON((20 10, 30 0, 40 10, 30 20, 20 10))");
System.out.println(polygon);
}
}