GIS:创建Geometry图形

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


}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值