jts学习——com.vividsolutions.jts.geom包

介绍

jts是一个为GIS服务提供的api,内部可以用坐标点构建空间模型,判断模型之间的关系等

Coordinate

JTS内部封装的一个坐标类Coordinate(坐标)是用来存储坐标的轻便的类。它不同于点,点是Geometry的子类。不像模范Point的对象(包含额外的信息,例如一个信包,一个精确度模型和空间参考系统信息),Coordinate只包含纵座标值和存取方法。表示空间坐标,newCoordinate(116.273352,40.057497)

file

GeometryFactory

用来构建空间模型

JTS包结构

系(linearref包)、计算交点(noding包)、几何图形操作(operation包)、平面图(planargraph包)、多边形化(polygnize包)、精度(precision)、工具(util包)

空间数据模型

JTS提供了如下的空间数据类型

Point     
     MultiPoint
     LineString     
     LinearRing  封闭的线条
     MultiLineString    多条线
     Polygon 多边形
     MultiPolygon           多个多边形
     GeometryCollection  包括点,线,面
file

空间模型的关系

判断两个几何图形是否存在指定的空间关系。包括:

file
file

实例代码:

package jtsTest;

import java.util.ArrayList;
import java.util.List;

import com.vividsolutions.jts.geom.*;
import com.vividsolutions.jts.io.ParseException;
import com.vividsolutions.jts.io.WKTReader;

/**
 * Class Operation.java
 * Description 几何对象操作
 * Company mapbar
 * author Chenll E-mail: Chenll@mapbar.com
 * Version 1.0
 * Date 2012-2-21 上午10:47:47
 */
public class OperationLines {

    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)与(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) throws ParseException {
        OperationLines op = new OperationLines();

//        //创建一条线
//        List<Coordinate> points1 = new ArrayList<Coordinate>();
//        points1.add(op.point(116.271635,40.052176));
//        points1.add(op.point(116.280991,40.052439));
//        points1.add(op.point(116.291119,40.050665));
//        LineString line1 = op.createLine(points1);
//        //创建第二条线
//        List<Coordinate> points2 = new ArrayList<Coordinate>();
//        points2.add(op.point(116.271292,40.046591));
//        points2.add(op.point(116.279446,40.046591));
//        points2.add(op.point(116.288115,40.054475));
//        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)
        /**
         * 构建多边形,
         * 1,利用geometryFactory的Create方法
         * 2. 利用wkt标记语言
         *  WKTReader reader = new WKTReader( geometryFactory );
         *  MultiPoint mpoint = (MultiPoint) reader.read("MULTIPOINT(109.013388 32.715519,119.32488 31.435678)");
         */
        GeometryFactory geometryFactory = new GeometryFactory();
        List<Coordinate> colist1 = new ArrayList<>();
        colist1.add(new Coordinate(116.280648,40.058811));
        colist1.add(new Coordinate(116.276356,40.050008));
        colist1.add(new Coordinate(116.289231,40.051322));
        colist1.add(new Coordinate(116.280648,40.058811));
        Coordinate[] cn = (Coordinate[]) colist1.toArray(new Coordinate[colist1.size()]);
        Polygon polygon1 = geometryFactory.createPolygon(cn);

        List<Coordinate> colist2 = new ArrayList<>();
        colist2.add(new Coordinate(116.273352,40.057497));
        colist2.add(new Coordinate(116.280733,40.052504));
        colist2.add(new Coordinate(116.270262,40.050336));
        colist2.add(new Coordinate(116.273352,40.057497));
        Coordinate[] cn1 = (Coordinate[]) colist1.toArray(new Coordinate[colist2.size()]);
        Polygon polygon2 = geometryFactory.createPolygon(cn1);

        Geometry intersection = polygon1.intersection(polygon2); //两个多边形的相交面积
        System.out.println(intersection);

        System.out.println(polygon1.equals(polygon2)); //形状是否相等

        WKTReader reader = new WKTReader( geometryFactory );
        Polygon wktPolygon1 = (Polygon) reader.read("POLYGON((0 0, 0 3, 3 3, 3 0, 0 0), (1 1, 1 2, 2 1, 1 1))', 10");
        Polygon wktPolygon2 = (Polygon) reader.read("POLYGON((0 0, 0 3, 3 3, 3 0, 0 0), (1 1, 1 2, 2 1, 1 1))', 10");

        System.out.println("相交面积坐标点:"+wktPolygon1.intersection(wktPolygon2));

    }
}

WKT简介:

WKT - 概念

WKT(Well-known text)是一种文本标记语言,用于表示矢量几何对象、空间参照系统及空间参照系统之间的转换。它的二进制表示方式,亦即WKB(well-known binary)则胜于在传输和在数据库中存储相同的信息。该格式由开放地理空间联盟(OGC)制定。

WKT - 几何对象

WKT可以表示的几何对象包括:点,线,多边形,TIN(不规则三角网)及多面体。可以通过几何集合的方式来表示不同维度的几何对象。

几何物体的坐标可以是2D(x,y),3D(x,y,z),4D(x,y,z,m),加上一个属于线性参照系统的m值。

以下为几何WKT字串样例:

POINT(6 10)
LINESTRING(3 4,10 50,20 25)
POLYGON((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2))
MULTIPOINT(3.5 5.6, 4.8 10.5)
MULTILINESTRING((3 4,10 50,20 25),(-5 -8,-10 -8,-15 -4))
MULTIPOLYGON(((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2)),((6 3,9 2,9 4,6 3)))
GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))
POINT ZM (1 1 5 60)
POINT M (1 1 80)
POINT EMPTY
MULTIPOLYGON EMPTY
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
com.vividsolutions.jts.geom jar是一个用于处理地理空间数据的Java库。该库提供了许多用于几何计算和空间分析的类和方法。 首先,com.vividsolutions.jts.geom jar提供了各种几何对象的表示,如点(Point)、线(Line)、多边形(Polygon)、多点(MultiPoint)、多线(MultiLine)和多边形集合(MultiPolygon)。这些几何对象具有坐标信息和相关的属性,可以用于描述和存储地理空间数据。 其次,该库还提供了许多几何计算和分析的方法。例如,可以使用该库中的方法来计算两个几何对象之间的距离、计算几何对象的面积和长度、判断点是否在几何对象内部等。这些方法可以在地理空间分析和地图应用程序中使用,使得开发者可以轻松处理空间数据的计算和分析任务。 此外,com.vividsolutions.jts.geom jar还支持对几何对象进行空间关系和拓扑分析。开发者可以使用该库中的方法来判断两个几何对象之间的关系,如相等、相交、含等,或者判断几何对象是否具有拓扑关系,如相邻、相连等。这些方法可以帮助开发者进行复杂的空间数据查询和分析。 总之,com.vividsolutions.jts.geom jar是一个功能强大的Java库,用于处理地理空间数据。它提供了各种几何对象的表示和处理方法,方便开发者进行几何计算、空间分析和拓扑处理。该库在各种地理信息系统和地图应用程序中广泛应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值