首页 > 其他分享 >Geometry

Geometry

时间:2024-04-08 16:33:54浏览次数:18  
标签:geometryFactory Geometry WKTReader reader Coordinate new 数据模型

一、几何对象模型概述

        独立于计算机平台之外的、天然适用于分布式计算的、统一使用建模语言表示的一种对象模型。几何对象模型类图如下:

二、几何对象模型分类

        几何对象模型大致可以分为3类:简单数据模型、集合数据模型、曲线和曲面数据模型

1、简单数据模型

        1.1 点数据模型(Point、MultiPoint)

        1.2 多段线数据模型(线段 | LineString、直线 | Line、线性环 | LineRing、多重多段线 | MultiLineString)

        1.3 多边形数据模型(Polygon)

        1.4 多面体表面对象(PolyhedralSurface)

2、集合数据模型

        2.1 几何对象集合(GeometryCollection)

        2.2 曲面几何对象集合(MultiSurface)

        2.3 多边形几何对象集合(MultiPolygon)

        2.4 曲线几何对象集合(MultiCurve)

3、曲线和曲面数据模型

        3.1 曲线数据模型(Curve)

        3.2 曲面数据模型(Surface)

三、几何对象的WKT表示

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

四、几何对象创建

1、创建单点(Point)

1.1 通过坐标对象Coordinate创建

GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
Coordinate coord = new Coordinate(1, 1);
Point point = geometryFactory.createPoint(coord);

1.2 通过WKT创建

GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
WKTReader reader = new WKTReader(geometryFactory);
Point point = (Point) reader.read("POINT (1 1)");

2、创建多点(MultiPoint)

2.1 通过CoordinateSequence创建

GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
CoordinateSequence coordinateSequence = new CoordinateSequence2D(1, 1,2,2,3,3);
MultiPoint multiPoint = geometryFactory.createMultiPoint(coordinateSequence);

2.2 通过WKT创建

GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
WKTReader reader = new WKTReader(geometryFactory);
MultiPoint multiPoint = (MultiPoint) reader.read("MULTIPOINT(1 1,2 2,3 3)");

3、创建线段(LineString)

3.1 通过Coordinate创建

GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
Coordinate[] coords = new Coordinate[] {new Coordinate(0, 2), new Coordinate(2, 0), new Coordinate(8, 6) };
LineString line = geometryFactory.createLineString(coordinates);

3.2 通过WKT创建

GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
WKTReader reader = new WKTReader( geometryFactory );
LineString line = (LineString) reader.read("LINESTRING(0 2, 2 0, 8 6)");

4、创建多重多线段(MultiLineString)

4.1 通过LineString[ ]创建

Coordinate[] coords  = new Coordinate[] {new Coordinate(2, 2), new Coordinate(3, 3)};
LineString lineString = geometryFactory.createLineString(coords);
Coordinate[] coords1  = new Coordinate[] {new Coordinate(3, 3), new Coordinate(4, 4)};
LineString lineString1 = geometryFactory.createLineString(coords1);

LineString[] lineStrings = new LineString[]{lineString, lineString1};
MultiLineString multiLineString = geometryFactory.createMultiLineString(lineStrings);

4.2 通过WKT创建

GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
WKTReader reader = new WKTReader( geometryFactory );
MultiLineString multiLineString = (MultiLineString) reader.read("MULTILINESTRING((3 4,10 50,20 25),(-5 -8,-10 -8,-15 -4))");

5、创建单面(Polygon | 多边形)

5.1 通过Coordinate创建

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; Polygon polygon = geometryFactory.createPolygon(ring, holes );

5.2 通过WKT创建

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

6、创建多面(MultiPolygon)

6.1 通过Polygon[ ] 创建

GeometryFactory#createMultiPolygon(Polygon[])

6.2 通过WKT创建

GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory( null );
WKTReader reader = new WKTReader( geometryFactory );
MultiPolygon multiPolygon = (MultiPolygon) reader.read("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)))");

五、Geometry操作方法

1、几何关系判断(返回值 boolean)

2、几何关系分析(返回值 几何对象)

2.1 buffer(缓冲区分析)

public Geometry buffer(double distance);

 distance 参数:缓冲区扩展的距离(可以是正数(向外扩展)、负数(向内扩展)或 0(边界))。示意图如下(注:绿色线代表扩展之后的):

2.2 intersection(交叉分析)

public Geometry intersection(Geometry other);

 geometryA.intersection(geometryB):获取两个几何体之间的交叉部分的几何体

2.3 convexHull(凸壳分析)

包含几何形体的所有点的最小凸壳多边形(外包多边形)。示意图如下:

2.4 union(联合分析)

获取多面体所有点的集合。示意图如下:

2.5 difference(差异分析)

获取一个多面体里有,另一个多面体里没有的点的集合。示意图如下:

2.6 symDifference(对称差异分析)

不同时在两个多面体中的所有点的集合。示意图如下:

标签:geometryFactory,Geometry,WKTReader,reader,Coordinate,new,数据模型
From: https://blog.csdn.net/qq_19800029/article/details/137499158

相关文章

  • three.js基础之几何体Curve、Geometry
    CurveEllipseCurve<canvasid="EllipseCurve"width="300px"height="200px"></canvas><canvasid="ArcCurve"width="300px"height="200px"></canvas><canvasid="Curv......
  • WPF Storyboary DoubleAnimationUsingPath PathGeometry
    <Windowx:Class="WpfApp30.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.......
  • 【OpenREALM学习笔记:4】geometry_msgs和tf在项目中的不同作用
    geometry_msgsgeometry_msgs是ROS中用于表示几何信息的消息包。它包含了多种消息类型,用于描述点、向量、变换、姿态(位置和方向)、形状等几何概念。geometry_msgs中的消息类型通常用于在ROS节点之间传递几何数据,例如:geometry_msgs/Point:表示三维空间中的一个点。geometry_......
  • GAMES01 Geometry
    生活中有许多曲面、曲线需要去表示。这里也有许多表示几何的方法:Implicitalgebraicsurfacelevelsetsdistancefunctions...Explicitpointcloudpolygonmeshsubdivision,NURBS...Implicit表达通常,隐式表达被定义为f(x,y,z)=0,其中f(x,y,z)是一个xyz的关系表达式......
  • Lecture 11 Geometry 2 (Curves and Surfaces)
    Lecture11Geometry2(CurvesandSurfaces)Curves曲线BézierCurves贝塞尔曲线用一系列控制点定义摸一个曲线,这些控制点会定义曲线满足的一些性质图中通过三个控制点,可以定义曲线起始点和结束点一定在\(p_0\)和\(p_3\)上,并且起始的切线和结束的切线一定都是\(p_0p_1\)......
  • Lecture 10 Geometry 1 (Introduction)
    Lecture10Geometry1(Introduction)Examplesofgeometry几何的例子不同形状的几何光滑的曲面复杂的模型、位置摆放布料水滴城市(复杂在东西多)怎么存储怎么渲染这么大级别的东西离得远的情况下如何简化几何模型如何利用光线之间的连续性毛发微观几何树枝......
  • Qt中关于setGeometry()函数的问题
    setGeometry是相对于父窗体来说的一种对子窗体进行位置设置的方法。当我用在不同的窗体的时候发现有不同的形式QMainWindow和QWidget都是相对父窗体来说的,可是QDialog用上这个设置位置的函数,却是相对于桌面而言的。但是按照道理,他们都是继承的QWidget,setGeometry这个函数的功能......
  • Qt QWindowsWindow::setGeometryDp: Unable to set geometry问题
    总结原因:由于子窗口和父窗口的大小关系不健康,导致父窗口resize失败,失败后会自定义大小解决方法:首先,修改父窗口尺寸,保证其大小可以容纳子部件,可以使用setFixSize()之类的函数修改父窗口尺寸。其次,一定要保证修改父窗口尺寸的函数是放在窗口布局代码之前,如图,我的setIn......
  • Qt 颜色对话框QColorDialog弹出时应用程序输出栏出现QWindowsWindow::setGeometry: Un
    引言在项目中点击按钮,弹出颜色选择对话框,但同时应用程序会在应用程序输出一栏中显示QWindowsWindow::setGeometry:Unabletosetgeometry180x30+345+311(frame:202x86+334+266)onQWidgetWindow/"QColorDialogClassWindow"on"\\.\DISPLAY1".Resultinggeometry:5......
  • WPF性能优化:形状(Shape)、几何图形(Geometry)和图画(Drawing)的使用
    在用户界面技术中,绘图是一个绕不开的话题。WPF提供了多种可根据应用程序要求进行优化的2D图形和图像的处理功能,包括画刷(Brush)、形状(Shape)、几何图形(Geometry)、图画(Drawing)和变换(Transform)等。其中形状(Shape)、几何图形(Geometry)和图画(Drawing)承担了基础的绘图功能,形......