1. 几何体的创建

在上一节中,我们通过一个csv文件转shp的示例展示了如何去创建一个点状的shp文件。然而在实际工作中,点要素只是几何体要素的一小部分,他还有线、多线、面、多面、曲线等多种几何体。那么他们都是怎么创建的呢?我们今天来探究一下他的真实面目。

2. WKT简介

因为GeoTools支持WKT创建几何体,那么我们有必要先简单了解一下什么是WKT。WKT(Well-known text)是一种文本标记语言,用于表示矢量几何对象、**空间参照系统**及空间参照系统之间的转换。它的二进制表示方式,亦即WKB(well-known binary)则胜于在传输和在数据库中存储相同的信息。该格式由开放地理空间联盟(OGC)制定。

2.1 表示矢量几何对象

WKT可以表示的几何对象包括:点,线,多边形,TIN(不规则三角网)及多面体。可以通过几何集合的方式来表示不同维度的几何对象。 几何物体的坐标可以是2D(x,y),3D(x,y,z),4D(x,y,z,m),加上一个属于线性参照系统的m值。下表就是表示几何体的实例及说明。

描述 语法 应用场景
二维点要素 POINT(6 10) 学校、基础设施位置
二维多点要素 MULTIPOINT(3.5 5.6, 4.8 10.5)
带有线型参照二维点 POINT M (1 1 80) 气象点
带有线型参照三维点 POINT ZM (1 1 5 60) 高程点
二维线要素 LINESTRING(3 4,10 50,20 25) 河流、道路
二维多线要素 MULTILINESTRING((3 4,10 50,20 25),(-5 -8,-10 -8,-15 -4)) 岛屿的线状行政界线
二维面状要素 POLYGON((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2)) 面状行政界线
二维多面要素 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 EMPTY
空面要素 MULTIPOLYGON EMPTY

2.2 表示空间参考系统

WKT主要就是用文本的方法表示空间参考系统,下面通过 2 个例子可以很直观地看到如何通过文本来描述空间参考。

  • 对于一个地理坐标系,比如最常见的 WGS84 坐标系统,WKT 描述是这样的:

    GEOGCS
    [
    "GCS_WGS_1984",
    DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],
    PRIMEM["Greenwich",0.0],
    UNIT["Degree",0.0174532925199433],
    AUTHORITY["EPSG",4326]
    ]
    

    “GEOGCS”表明其后紧随的“[ ]”中描述的是一个地理坐标系统。该坐标系统名称为“GCS_WGS_1984”;采用的大地基准面为“D_WGS_1984”,该基准面近似椭球体的长轴为 6378137.0 米、扁率为 298.257223563;以格林威治 0 度经线为起始经线;地图单位为度,该单位的转换因子 为 0.0174532925199433(π/180);最后,该坐标系统在EPSG中的编码为“4326”。

  • 对于一个投影坐标系,比如 WGS84 Web Mercator(Auxiliary Sphere)坐标系统,WKT 描述是这样的:

    PROJCS
    [
    "WGS_1984_Web_Mercator_Auxiliary_Sphere",
    GEOGCS
    [
    "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],
    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],
    AUTHORITY["EPSG",3857]
    ]
    

    类似的,“PROJCS”代表这是一个投影坐标系。投影坐标系中必然会包括一个地理坐标系,这里的地理坐标系就是“GCS_WGS_1984”,这个地理坐标系的定义和上面的类似。下面紧跟着的是投影的相关参数,“Mercator_Auxiliary_Sphere”是采用投影的名称,这个投影坐标系以 0 度经线为中央经线进行投影;坐标系的单位为米(显然,转换因子就为 1.0),而该坐标系的 EPSG 编码为“3857”。

  • 在线 EPSG编码参考:http://spatialreference.org/ref/epsg/

3. GeoTools中的几何体架构

3.1 几何体的初始化

为了创建一个 Geometry 对象,我们使用GeometryFactory了 JTS 提供的。GeometryFactory有一堆创建方法,它们采用 Coordinate 实例(和数组)并将它们包装在 Geometry 的适当实例中。下面是创建几何体的类图:

#mermaid-svg-gvIpkIXy5WjuDO5o .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-gvIpkIXy5WjuDO5o .label text{fill:#333}#mermaid-svg-gvIpkIXy5WjuDO5o .node rect,#mermaid-svg-gvIpkIXy5WjuDO5o .node circle,#mermaid-svg-gvIpkIXy5WjuDO5o .node ellipse,#mermaid-svg-gvIpkIXy5WjuDO5o .node polygon,#mermaid-svg-gvIpkIXy5WjuDO5o .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-gvIpkIXy5WjuDO5o .node .label{text-align:center;fill:#333}#mermaid-svg-gvIpkIXy5WjuDO5o .node.clickable{cursor:pointer}#mermaid-svg-gvIpkIXy5WjuDO5o .arrowheadPath{fill:#333}#mermaid-svg-gvIpkIXy5WjuDO5o .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-gvIpkIXy5WjuDO5o .flowchart-link{stroke:#333;fill:none}#mermaid-svg-gvIpkIXy5WjuDO5o .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-gvIpkIXy5WjuDO5o .edgeLabel rect{opacity:0.9}#mermaid-svg-gvIpkIXy5WjuDO5o .edgeLabel span{color:#333}#mermaid-svg-gvIpkIXy5WjuDO5o .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-gvIpkIXy5WjuDO5o .cluster text{fill:#333}#mermaid-svg-gvIpkIXy5WjuDO5o div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-gvIpkIXy5WjuDO5o .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-gvIpkIXy5WjuDO5o text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-gvIpkIXy5WjuDO5o .actor-line{stroke:grey}#mermaid-svg-gvIpkIXy5WjuDO5o .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-gvIpkIXy5WjuDO5o .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-gvIpkIXy5WjuDO5o #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-gvIpkIXy5WjuDO5o .sequenceNumber{fill:#fff}#mermaid-svg-gvIpkIXy5WjuDO5o #sequencenumber{fill:#333}#mermaid-svg-gvIpkIXy5WjuDO5o #crosshead path{fill:#333;stroke:#333}#mermaid-svg-gvIpkIXy5WjuDO5o .messageText{fill:#333;stroke:#333}#mermaid-svg-gvIpkIXy5WjuDO5o .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-gvIpkIXy5WjuDO5o .labelText,#mermaid-svg-gvIpkIXy5WjuDO5o .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-gvIpkIXy5WjuDO5o .loopText,#mermaid-svg-gvIpkIXy5WjuDO5o .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-gvIpkIXy5WjuDO5o .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-gvIpkIXy5WjuDO5o .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-gvIpkIXy5WjuDO5o .noteText,#mermaid-svg-gvIpkIXy5WjuDO5o .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-gvIpkIXy5WjuDO5o .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-gvIpkIXy5WjuDO5o .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-gvIpkIXy5WjuDO5o .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-gvIpkIXy5WjuDO5o .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gvIpkIXy5WjuDO5o .section{stroke:none;opacity:0.2}#mermaid-svg-gvIpkIXy5WjuDO5o .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-gvIpkIXy5WjuDO5o .section2{fill:#fff400}#mermaid-svg-gvIpkIXy5WjuDO5o .section1,#mermaid-svg-gvIpkIXy5WjuDO5o .section3{fill:#fff;opacity:0.2}#mermaid-svg-gvIpkIXy5WjuDO5o .sectionTitle0{fill:#333}#mermaid-svg-gvIpkIXy5WjuDO5o .sectionTitle1{fill:#333}#mermaid-svg-gvIpkIXy5WjuDO5o .sectionTitle2{fill:#333}#mermaid-svg-gvIpkIXy5WjuDO5o .sectionTitle3{fill:#333}#mermaid-svg-gvIpkIXy5WjuDO5o .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gvIpkIXy5WjuDO5o .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-gvIpkIXy5WjuDO5o .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gvIpkIXy5WjuDO5o .grid path{stroke-width:0}#mermaid-svg-gvIpkIXy5WjuDO5o .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-gvIpkIXy5WjuDO5o .task{stroke-width:2}#mermaid-svg-gvIpkIXy5WjuDO5o .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gvIpkIXy5WjuDO5o .taskText:not([font-size]){font-size:11px}#mermaid-svg-gvIpkIXy5WjuDO5o .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gvIpkIXy5WjuDO5o .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-gvIpkIXy5WjuDO5o .task.clickable{cursor:pointer}#mermaid-svg-gvIpkIXy5WjuDO5o .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-gvIpkIXy5WjuDO5o .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-gvIpkIXy5WjuDO5o .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-gvIpkIXy5WjuDO5o .taskText0,#mermaid-svg-gvIpkIXy5WjuDO5o .taskText1,#mermaid-svg-gvIpkIXy5WjuDO5o .taskText2,#mermaid-svg-gvIpkIXy5WjuDO5o .taskText3{fill:#fff}#mermaid-svg-gvIpkIXy5WjuDO5o .task0,#mermaid-svg-gvIpkIXy5WjuDO5o .task1,#mermaid-svg-gvIpkIXy5WjuDO5o .task2,#mermaid-svg-gvIpkIXy5WjuDO5o .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-gvIpkIXy5WjuDO5o .taskTextOutside0,#mermaid-svg-gvIpkIXy5WjuDO5o .taskTextOutside2{fill:#000}#mermaid-svg-gvIpkIXy5WjuDO5o .taskTextOutside1,#mermaid-svg-gvIpkIXy5WjuDO5o .taskTextOutside3{fill:#000}#mermaid-svg-gvIpkIXy5WjuDO5o .active0,#mermaid-svg-gvIpkIXy5WjuDO5o .active1,#mermaid-svg-gvIpkIXy5WjuDO5o .active2,#mermaid-svg-gvIpkIXy5WjuDO5o .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-gvIpkIXy5WjuDO5o .activeText0,#mermaid-svg-gvIpkIXy5WjuDO5o .activeText1,#mermaid-svg-gvIpkIXy5WjuDO5o .activeText2,#mermaid-svg-gvIpkIXy5WjuDO5o .activeText3{fill:#000 !important}#mermaid-svg-gvIpkIXy5WjuDO5o .done0,#mermaid-svg-gvIpkIXy5WjuDO5o .done1,#mermaid-svg-gvIpkIXy5WjuDO5o .done2,#mermaid-svg-gvIpkIXy5WjuDO5o .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-gvIpkIXy5WjuDO5o .doneText0,#mermaid-svg-gvIpkIXy5WjuDO5o .doneText1,#mermaid-svg-gvIpkIXy5WjuDO5o .doneText2,#mermaid-svg-gvIpkIXy5WjuDO5o .doneText3{fill:#000 !important}#mermaid-svg-gvIpkIXy5WjuDO5o .crit0,#mermaid-svg-gvIpkIXy5WjuDO5o .crit1,#mermaid-svg-gvIpkIXy5WjuDO5o .crit2,#mermaid-svg-gvIpkIXy5WjuDO5o .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-gvIpkIXy5WjuDO5o .activeCrit0,#mermaid-svg-gvIpkIXy5WjuDO5o .activeCrit1,#mermaid-svg-gvIpkIXy5WjuDO5o .activeCrit2,#mermaid-svg-gvIpkIXy5WjuDO5o .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-gvIpkIXy5WjuDO5o .doneCrit0,#mermaid-svg-gvIpkIXy5WjuDO5o .doneCrit1,#mermaid-svg-gvIpkIXy5WjuDO5o .doneCrit2,#mermaid-svg-gvIpkIXy5WjuDO5o .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-gvIpkIXy5WjuDO5o .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-gvIpkIXy5WjuDO5o .milestoneText{font-style:italic}#mermaid-svg-gvIpkIXy5WjuDO5o .doneCritText0,#mermaid-svg-gvIpkIXy5WjuDO5o .doneCritText1,#mermaid-svg-gvIpkIXy5WjuDO5o .doneCritText2,#mermaid-svg-gvIpkIXy5WjuDO5o .doneCritText3{fill:#000 !important}#mermaid-svg-gvIpkIXy5WjuDO5o .activeCritText0,#mermaid-svg-gvIpkIXy5WjuDO5o .activeCritText1,#mermaid-svg-gvIpkIXy5WjuDO5o .activeCritText2,#mermaid-svg-gvIpkIXy5WjuDO5o .activeCritText3{fill:#000 !important}#mermaid-svg-gvIpkIXy5WjuDO5o .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gvIpkIXy5WjuDO5o g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-gvIpkIXy5WjuDO5o g.classGroup text .title{font-weight:bolder}#mermaid-svg-gvIpkIXy5WjuDO5o g.clickable{cursor:pointer}#mermaid-svg-gvIpkIXy5WjuDO5o g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-gvIpkIXy5WjuDO5o g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-gvIpkIXy5WjuDO5o .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-gvIpkIXy5WjuDO5o .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-gvIpkIXy5WjuDO5o .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-gvIpkIXy5WjuDO5o .dashed-line{stroke-dasharray:3}#mermaid-svg-gvIpkIXy5WjuDO5o #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-gvIpkIXy5WjuDO5o #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-gvIpkIXy5WjuDO5o #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-gvIpkIXy5WjuDO5o #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-gvIpkIXy5WjuDO5o #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-gvIpkIXy5WjuDO5o #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-gvIpkIXy5WjuDO5o #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-gvIpkIXy5WjuDO5o #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-gvIpkIXy5WjuDO5o .commit-id,#mermaid-svg-gvIpkIXy5WjuDO5o .commit-msg,#mermaid-svg-gvIpkIXy5WjuDO5o .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gvIpkIXy5WjuDO5o .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gvIpkIXy5WjuDO5o .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gvIpkIXy5WjuDO5o g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gvIpkIXy5WjuDO5o g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-gvIpkIXy5WjuDO5o g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-gvIpkIXy5WjuDO5o g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-gvIpkIXy5WjuDO5o g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-gvIpkIXy5WjuDO5o g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-gvIpkIXy5WjuDO5o .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-gvIpkIXy5WjuDO5o .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-gvIpkIXy5WjuDO5o .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-gvIpkIXy5WjuDO5o .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-gvIpkIXy5WjuDO5o .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-gvIpkIXy5WjuDO5o .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-gvIpkIXy5WjuDO5o .edgeLabel text{fill:#333}#mermaid-svg-gvIpkIXy5WjuDO5o .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gvIpkIXy5WjuDO5o .node circle.state-start{fill:black;stroke:black}#mermaid-svg-gvIpkIXy5WjuDO5o .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-gvIpkIXy5WjuDO5o #statediagram-barbEnd{fill:#9370db}#mermaid-svg-gvIpkIXy5WjuDO5o .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-gvIpkIXy5WjuDO5o .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-gvIpkIXy5WjuDO5o .statediagram-state .divider{stroke:#9370db}#mermaid-svg-gvIpkIXy5WjuDO5o .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-gvIpkIXy5WjuDO5o .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-gvIpkIXy5WjuDO5o .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-gvIpkIXy5WjuDO5o .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-gvIpkIXy5WjuDO5o .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-gvIpkIXy5WjuDO5o .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-gvIpkIXy5WjuDO5o .note-edge{stroke-dasharray:5}#mermaid-svg-gvIpkIXy5WjuDO5o .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-gvIpkIXy5WjuDO5o .error-icon{fill:#522}#mermaid-svg-gvIpkIXy5WjuDO5o .error-text{fill:#522;stroke:#522}#mermaid-svg-gvIpkIXy5WjuDO5o .edge-thickness-normal{stroke-width:2px}#mermaid-svg-gvIpkIXy5WjuDO5o .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-gvIpkIXy5WjuDO5o .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-gvIpkIXy5WjuDO5o .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-gvIpkIXy5WjuDO5o .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-gvIpkIXy5WjuDO5o .marker{fill:#333}#mermaid-svg-gvIpkIXy5WjuDO5o .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-gvIpkIXy5WjuDO5o {color: rgba(0, 0, 0, 0.75);font: ;}GeometryGeometryFactoryPrecisionModel#factory0..1-precisionModel0..1

PrecisionModel:指定几何体中坐标的精度模型。换句话说,指定所有几何图形的允许点网格。假设坐标在几何上是精确的。也就是说,坐标假定为四舍五入到几何图形的精确模型。JTS输入例程自动舍入在创建几何图形之前将坐标转换为精确模型。

3.2 几何体的简单类

由 JTS 实现的 SQL 规范的 OGC 简单功能适用于PointLineStringPolygon,每个几何体都可以包含在一个边界中(充当包含所有几何坐标的边界框),类图如下:

#mermaid-svg-A5o1O5vE0pmoRcSJ .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-A5o1O5vE0pmoRcSJ .label text{fill:#333}#mermaid-svg-A5o1O5vE0pmoRcSJ .node rect,#mermaid-svg-A5o1O5vE0pmoRcSJ .node circle,#mermaid-svg-A5o1O5vE0pmoRcSJ .node ellipse,#mermaid-svg-A5o1O5vE0pmoRcSJ .node polygon,#mermaid-svg-A5o1O5vE0pmoRcSJ .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-A5o1O5vE0pmoRcSJ .node .label{text-align:center;fill:#333}#mermaid-svg-A5o1O5vE0pmoRcSJ .node.clickable{cursor:pointer}#mermaid-svg-A5o1O5vE0pmoRcSJ .arrowheadPath{fill:#333}#mermaid-svg-A5o1O5vE0pmoRcSJ .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-A5o1O5vE0pmoRcSJ .flowchart-link{stroke:#333;fill:none}#mermaid-svg-A5o1O5vE0pmoRcSJ .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-A5o1O5vE0pmoRcSJ .edgeLabel rect{opacity:0.9}#mermaid-svg-A5o1O5vE0pmoRcSJ .edgeLabel span{color:#333}#mermaid-svg-A5o1O5vE0pmoRcSJ .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-A5o1O5vE0pmoRcSJ .cluster text{fill:#333}#mermaid-svg-A5o1O5vE0pmoRcSJ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-A5o1O5vE0pmoRcSJ .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-A5o1O5vE0pmoRcSJ text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-A5o1O5vE0pmoRcSJ .actor-line{stroke:grey}#mermaid-svg-A5o1O5vE0pmoRcSJ .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-A5o1O5vE0pmoRcSJ .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-A5o1O5vE0pmoRcSJ #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-A5o1O5vE0pmoRcSJ .sequenceNumber{fill:#fff}#mermaid-svg-A5o1O5vE0pmoRcSJ #sequencenumber{fill:#333}#mermaid-svg-A5o1O5vE0pmoRcSJ #crosshead path{fill:#333;stroke:#333}#mermaid-svg-A5o1O5vE0pmoRcSJ .messageText{fill:#333;stroke:#333}#mermaid-svg-A5o1O5vE0pmoRcSJ .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-A5o1O5vE0pmoRcSJ .labelText,#mermaid-svg-A5o1O5vE0pmoRcSJ .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-A5o1O5vE0pmoRcSJ .loopText,#mermaid-svg-A5o1O5vE0pmoRcSJ .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-A5o1O5vE0pmoRcSJ .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-A5o1O5vE0pmoRcSJ .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-A5o1O5vE0pmoRcSJ .noteText,#mermaid-svg-A5o1O5vE0pmoRcSJ .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-A5o1O5vE0pmoRcSJ .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-A5o1O5vE0pmoRcSJ .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-A5o1O5vE0pmoRcSJ .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-A5o1O5vE0pmoRcSJ .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-A5o1O5vE0pmoRcSJ .section{stroke:none;opacity:0.2}#mermaid-svg-A5o1O5vE0pmoRcSJ .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-A5o1O5vE0pmoRcSJ .section2{fill:#fff400}#mermaid-svg-A5o1O5vE0pmoRcSJ .section1,#mermaid-svg-A5o1O5vE0pmoRcSJ .section3{fill:#fff;opacity:0.2}#mermaid-svg-A5o1O5vE0pmoRcSJ .sectionTitle0{fill:#333}#mermaid-svg-A5o1O5vE0pmoRcSJ .sectionTitle1{fill:#333}#mermaid-svg-A5o1O5vE0pmoRcSJ .sectionTitle2{fill:#333}#mermaid-svg-A5o1O5vE0pmoRcSJ .sectionTitle3{fill:#333}#mermaid-svg-A5o1O5vE0pmoRcSJ .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-A5o1O5vE0pmoRcSJ .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-A5o1O5vE0pmoRcSJ .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-A5o1O5vE0pmoRcSJ .grid path{stroke-width:0}#mermaid-svg-A5o1O5vE0pmoRcSJ .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-A5o1O5vE0pmoRcSJ .task{stroke-width:2}#mermaid-svg-A5o1O5vE0pmoRcSJ .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-A5o1O5vE0pmoRcSJ .taskText:not([font-size]){font-size:11px}#mermaid-svg-A5o1O5vE0pmoRcSJ .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-A5o1O5vE0pmoRcSJ .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-A5o1O5vE0pmoRcSJ .task.clickable{cursor:pointer}#mermaid-svg-A5o1O5vE0pmoRcSJ .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-A5o1O5vE0pmoRcSJ .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-A5o1O5vE0pmoRcSJ .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-A5o1O5vE0pmoRcSJ .taskText0,#mermaid-svg-A5o1O5vE0pmoRcSJ .taskText1,#mermaid-svg-A5o1O5vE0pmoRcSJ .taskText2,#mermaid-svg-A5o1O5vE0pmoRcSJ .taskText3{fill:#fff}#mermaid-svg-A5o1O5vE0pmoRcSJ .task0,#mermaid-svg-A5o1O5vE0pmoRcSJ .task1,#mermaid-svg-A5o1O5vE0pmoRcSJ .task2,#mermaid-svg-A5o1O5vE0pmoRcSJ .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-A5o1O5vE0pmoRcSJ .taskTextOutside0,#mermaid-svg-A5o1O5vE0pmoRcSJ .taskTextOutside2{fill:#000}#mermaid-svg-A5o1O5vE0pmoRcSJ .taskTextOutside1,#mermaid-svg-A5o1O5vE0pmoRcSJ .taskTextOutside3{fill:#000}#mermaid-svg-A5o1O5vE0pmoRcSJ .active0,#mermaid-svg-A5o1O5vE0pmoRcSJ .active1,#mermaid-svg-A5o1O5vE0pmoRcSJ .active2,#mermaid-svg-A5o1O5vE0pmoRcSJ .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-A5o1O5vE0pmoRcSJ .activeText0,#mermaid-svg-A5o1O5vE0pmoRcSJ .activeText1,#mermaid-svg-A5o1O5vE0pmoRcSJ .activeText2,#mermaid-svg-A5o1O5vE0pmoRcSJ .activeText3{fill:#000 !important}#mermaid-svg-A5o1O5vE0pmoRcSJ .done0,#mermaid-svg-A5o1O5vE0pmoRcSJ .done1,#mermaid-svg-A5o1O5vE0pmoRcSJ .done2,#mermaid-svg-A5o1O5vE0pmoRcSJ .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-A5o1O5vE0pmoRcSJ .doneText0,#mermaid-svg-A5o1O5vE0pmoRcSJ .doneText1,#mermaid-svg-A5o1O5vE0pmoRcSJ .doneText2,#mermaid-svg-A5o1O5vE0pmoRcSJ .doneText3{fill:#000 !important}#mermaid-svg-A5o1O5vE0pmoRcSJ .crit0,#mermaid-svg-A5o1O5vE0pmoRcSJ .crit1,#mermaid-svg-A5o1O5vE0pmoRcSJ .crit2,#mermaid-svg-A5o1O5vE0pmoRcSJ .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-A5o1O5vE0pmoRcSJ .activeCrit0,#mermaid-svg-A5o1O5vE0pmoRcSJ .activeCrit1,#mermaid-svg-A5o1O5vE0pmoRcSJ .activeCrit2,#mermaid-svg-A5o1O5vE0pmoRcSJ .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-A5o1O5vE0pmoRcSJ .doneCrit0,#mermaid-svg-A5o1O5vE0pmoRcSJ .doneCrit1,#mermaid-svg-A5o1O5vE0pmoRcSJ .doneCrit2,#mermaid-svg-A5o1O5vE0pmoRcSJ .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-A5o1O5vE0pmoRcSJ .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-A5o1O5vE0pmoRcSJ .milestoneText{font-style:italic}#mermaid-svg-A5o1O5vE0pmoRcSJ .doneCritText0,#mermaid-svg-A5o1O5vE0pmoRcSJ .doneCritText1,#mermaid-svg-A5o1O5vE0pmoRcSJ .doneCritText2,#mermaid-svg-A5o1O5vE0pmoRcSJ .doneCritText3{fill:#000 !important}#mermaid-svg-A5o1O5vE0pmoRcSJ .activeCritText0,#mermaid-svg-A5o1O5vE0pmoRcSJ .activeCritText1,#mermaid-svg-A5o1O5vE0pmoRcSJ .activeCritText2,#mermaid-svg-A5o1O5vE0pmoRcSJ .activeCritText3{fill:#000 !important}#mermaid-svg-A5o1O5vE0pmoRcSJ .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-A5o1O5vE0pmoRcSJ g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-A5o1O5vE0pmoRcSJ g.classGroup text .title{font-weight:bolder}#mermaid-svg-A5o1O5vE0pmoRcSJ g.clickable{cursor:pointer}#mermaid-svg-A5o1O5vE0pmoRcSJ g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-A5o1O5vE0pmoRcSJ g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-A5o1O5vE0pmoRcSJ .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-A5o1O5vE0pmoRcSJ .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-A5o1O5vE0pmoRcSJ .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-A5o1O5vE0pmoRcSJ .dashed-line{stroke-dasharray:3}#mermaid-svg-A5o1O5vE0pmoRcSJ #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-A5o1O5vE0pmoRcSJ #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-A5o1O5vE0pmoRcSJ #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-A5o1O5vE0pmoRcSJ #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-A5o1O5vE0pmoRcSJ #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-A5o1O5vE0pmoRcSJ #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-A5o1O5vE0pmoRcSJ #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-A5o1O5vE0pmoRcSJ #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-A5o1O5vE0pmoRcSJ .commit-id,#mermaid-svg-A5o1O5vE0pmoRcSJ .commit-msg,#mermaid-svg-A5o1O5vE0pmoRcSJ .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-A5o1O5vE0pmoRcSJ .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-A5o1O5vE0pmoRcSJ .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-A5o1O5vE0pmoRcSJ g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-A5o1O5vE0pmoRcSJ g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-A5o1O5vE0pmoRcSJ g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-A5o1O5vE0pmoRcSJ g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-A5o1O5vE0pmoRcSJ g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-A5o1O5vE0pmoRcSJ g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-A5o1O5vE0pmoRcSJ .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-A5o1O5vE0pmoRcSJ .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-A5o1O5vE0pmoRcSJ .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-A5o1O5vE0pmoRcSJ .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-A5o1O5vE0pmoRcSJ .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-A5o1O5vE0pmoRcSJ .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-A5o1O5vE0pmoRcSJ .edgeLabel text{fill:#333}#mermaid-svg-A5o1O5vE0pmoRcSJ .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-A5o1O5vE0pmoRcSJ .node circle.state-start{fill:black;stroke:black}#mermaid-svg-A5o1O5vE0pmoRcSJ .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-A5o1O5vE0pmoRcSJ #statediagram-barbEnd{fill:#9370db}#mermaid-svg-A5o1O5vE0pmoRcSJ .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-A5o1O5vE0pmoRcSJ .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-A5o1O5vE0pmoRcSJ .statediagram-state .divider{stroke:#9370db}#mermaid-svg-A5o1O5vE0pmoRcSJ .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-A5o1O5vE0pmoRcSJ .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-A5o1O5vE0pmoRcSJ .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-A5o1O5vE0pmoRcSJ .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-A5o1O5vE0pmoRcSJ .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-A5o1O5vE0pmoRcSJ .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-A5o1O5vE0pmoRcSJ .note-edge{stroke-dasharray:5}#mermaid-svg-A5o1O5vE0pmoRcSJ .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-A5o1O5vE0pmoRcSJ .error-icon{fill:#522}#mermaid-svg-A5o1O5vE0pmoRcSJ .error-text{fill:#522;stroke:#522}#mermaid-svg-A5o1O5vE0pmoRcSJ .edge-thickness-normal{stroke-width:2px}#mermaid-svg-A5o1O5vE0pmoRcSJ .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-A5o1O5vE0pmoRcSJ .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-A5o1O5vE0pmoRcSJ .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-A5o1O5vE0pmoRcSJ .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-A5o1O5vE0pmoRcSJ .marker{fill:#333}#mermaid-svg-A5o1O5vE0pmoRcSJ .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-A5o1O5vE0pmoRcSJ {color: rgba(0, 0, 0, 0.75);font: ;}GeometryPointLineStringPolygonLineRingLinearRingEnvelope#shell0..1#holes0..*#envelope0..1

3.3 几何体集合

OGC Simple Feature for SQL 规范还提供对GeometryCollections. GeometryCollections本身被认为是几何。类图如下:

#mermaid-svg-RjoXkfIpkUyRwr5D .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-RjoXkfIpkUyRwr5D .label text{fill:#333}#mermaid-svg-RjoXkfIpkUyRwr5D .node rect,#mermaid-svg-RjoXkfIpkUyRwr5D .node circle,#mermaid-svg-RjoXkfIpkUyRwr5D .node ellipse,#mermaid-svg-RjoXkfIpkUyRwr5D .node polygon,#mermaid-svg-RjoXkfIpkUyRwr5D .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-RjoXkfIpkUyRwr5D .node .label{text-align:center;fill:#333}#mermaid-svg-RjoXkfIpkUyRwr5D .node.clickable{cursor:pointer}#mermaid-svg-RjoXkfIpkUyRwr5D .arrowheadPath{fill:#333}#mermaid-svg-RjoXkfIpkUyRwr5D .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-RjoXkfIpkUyRwr5D .flowchart-link{stroke:#333;fill:none}#mermaid-svg-RjoXkfIpkUyRwr5D .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-RjoXkfIpkUyRwr5D .edgeLabel rect{opacity:0.9}#mermaid-svg-RjoXkfIpkUyRwr5D .edgeLabel span{color:#333}#mermaid-svg-RjoXkfIpkUyRwr5D .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-RjoXkfIpkUyRwr5D .cluster text{fill:#333}#mermaid-svg-RjoXkfIpkUyRwr5D div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-RjoXkfIpkUyRwr5D .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-RjoXkfIpkUyRwr5D text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-RjoXkfIpkUyRwr5D .actor-line{stroke:grey}#mermaid-svg-RjoXkfIpkUyRwr5D .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-RjoXkfIpkUyRwr5D .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-RjoXkfIpkUyRwr5D #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-RjoXkfIpkUyRwr5D .sequenceNumber{fill:#fff}#mermaid-svg-RjoXkfIpkUyRwr5D #sequencenumber{fill:#333}#mermaid-svg-RjoXkfIpkUyRwr5D #crosshead path{fill:#333;stroke:#333}#mermaid-svg-RjoXkfIpkUyRwr5D .messageText{fill:#333;stroke:#333}#mermaid-svg-RjoXkfIpkUyRwr5D .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-RjoXkfIpkUyRwr5D .labelText,#mermaid-svg-RjoXkfIpkUyRwr5D .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-RjoXkfIpkUyRwr5D .loopText,#mermaid-svg-RjoXkfIpkUyRwr5D .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-RjoXkfIpkUyRwr5D .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-RjoXkfIpkUyRwr5D .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-RjoXkfIpkUyRwr5D .noteText,#mermaid-svg-RjoXkfIpkUyRwr5D .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-RjoXkfIpkUyRwr5D .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-RjoXkfIpkUyRwr5D .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-RjoXkfIpkUyRwr5D .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-RjoXkfIpkUyRwr5D .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-RjoXkfIpkUyRwr5D .section{stroke:none;opacity:0.2}#mermaid-svg-RjoXkfIpkUyRwr5D .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-RjoXkfIpkUyRwr5D .section2{fill:#fff400}#mermaid-svg-RjoXkfIpkUyRwr5D .section1,#mermaid-svg-RjoXkfIpkUyRwr5D .section3{fill:#fff;opacity:0.2}#mermaid-svg-RjoXkfIpkUyRwr5D .sectionTitle0{fill:#333}#mermaid-svg-RjoXkfIpkUyRwr5D .sectionTitle1{fill:#333}#mermaid-svg-RjoXkfIpkUyRwr5D .sectionTitle2{fill:#333}#mermaid-svg-RjoXkfIpkUyRwr5D .sectionTitle3{fill:#333}#mermaid-svg-RjoXkfIpkUyRwr5D .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-RjoXkfIpkUyRwr5D .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-RjoXkfIpkUyRwr5D .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-RjoXkfIpkUyRwr5D .grid path{stroke-width:0}#mermaid-svg-RjoXkfIpkUyRwr5D .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-RjoXkfIpkUyRwr5D .task{stroke-width:2}#mermaid-svg-RjoXkfIpkUyRwr5D .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-RjoXkfIpkUyRwr5D .taskText:not([font-size]){font-size:11px}#mermaid-svg-RjoXkfIpkUyRwr5D .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-RjoXkfIpkUyRwr5D .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-RjoXkfIpkUyRwr5D .task.clickable{cursor:pointer}#mermaid-svg-RjoXkfIpkUyRwr5D .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-RjoXkfIpkUyRwr5D .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-RjoXkfIpkUyRwr5D .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-RjoXkfIpkUyRwr5D .taskText0,#mermaid-svg-RjoXkfIpkUyRwr5D .taskText1,#mermaid-svg-RjoXkfIpkUyRwr5D .taskText2,#mermaid-svg-RjoXkfIpkUyRwr5D .taskText3{fill:#fff}#mermaid-svg-RjoXkfIpkUyRwr5D .task0,#mermaid-svg-RjoXkfIpkUyRwr5D .task1,#mermaid-svg-RjoXkfIpkUyRwr5D .task2,#mermaid-svg-RjoXkfIpkUyRwr5D .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-RjoXkfIpkUyRwr5D .taskTextOutside0,#mermaid-svg-RjoXkfIpkUyRwr5D .taskTextOutside2{fill:#000}#mermaid-svg-RjoXkfIpkUyRwr5D .taskTextOutside1,#mermaid-svg-RjoXkfIpkUyRwr5D .taskTextOutside3{fill:#000}#mermaid-svg-RjoXkfIpkUyRwr5D .active0,#mermaid-svg-RjoXkfIpkUyRwr5D .active1,#mermaid-svg-RjoXkfIpkUyRwr5D .active2,#mermaid-svg-RjoXkfIpkUyRwr5D .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-RjoXkfIpkUyRwr5D .activeText0,#mermaid-svg-RjoXkfIpkUyRwr5D .activeText1,#mermaid-svg-RjoXkfIpkUyRwr5D .activeText2,#mermaid-svg-RjoXkfIpkUyRwr5D .activeText3{fill:#000 !important}#mermaid-svg-RjoXkfIpkUyRwr5D .done0,#mermaid-svg-RjoXkfIpkUyRwr5D .done1,#mermaid-svg-RjoXkfIpkUyRwr5D .done2,#mermaid-svg-RjoXkfIpkUyRwr5D .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-RjoXkfIpkUyRwr5D .doneText0,#mermaid-svg-RjoXkfIpkUyRwr5D .doneText1,#mermaid-svg-RjoXkfIpkUyRwr5D .doneText2,#mermaid-svg-RjoXkfIpkUyRwr5D .doneText3{fill:#000 !important}#mermaid-svg-RjoXkfIpkUyRwr5D .crit0,#mermaid-svg-RjoXkfIpkUyRwr5D .crit1,#mermaid-svg-RjoXkfIpkUyRwr5D .crit2,#mermaid-svg-RjoXkfIpkUyRwr5D .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-RjoXkfIpkUyRwr5D .activeCrit0,#mermaid-svg-RjoXkfIpkUyRwr5D .activeCrit1,#mermaid-svg-RjoXkfIpkUyRwr5D .activeCrit2,#mermaid-svg-RjoXkfIpkUyRwr5D .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-RjoXkfIpkUyRwr5D .doneCrit0,#mermaid-svg-RjoXkfIpkUyRwr5D .doneCrit1,#mermaid-svg-RjoXkfIpkUyRwr5D .doneCrit2,#mermaid-svg-RjoXkfIpkUyRwr5D .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-RjoXkfIpkUyRwr5D .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-RjoXkfIpkUyRwr5D .milestoneText{font-style:italic}#mermaid-svg-RjoXkfIpkUyRwr5D .doneCritText0,#mermaid-svg-RjoXkfIpkUyRwr5D .doneCritText1,#mermaid-svg-RjoXkfIpkUyRwr5D .doneCritText2,#mermaid-svg-RjoXkfIpkUyRwr5D .doneCritText3{fill:#000 !important}#mermaid-svg-RjoXkfIpkUyRwr5D .activeCritText0,#mermaid-svg-RjoXkfIpkUyRwr5D .activeCritText1,#mermaid-svg-RjoXkfIpkUyRwr5D .activeCritText2,#mermaid-svg-RjoXkfIpkUyRwr5D .activeCritText3{fill:#000 !important}#mermaid-svg-RjoXkfIpkUyRwr5D .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-RjoXkfIpkUyRwr5D g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-RjoXkfIpkUyRwr5D g.classGroup text .title{font-weight:bolder}#mermaid-svg-RjoXkfIpkUyRwr5D g.clickable{cursor:pointer}#mermaid-svg-RjoXkfIpkUyRwr5D g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-RjoXkfIpkUyRwr5D g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-RjoXkfIpkUyRwr5D .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-RjoXkfIpkUyRwr5D .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-RjoXkfIpkUyRwr5D .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-RjoXkfIpkUyRwr5D .dashed-line{stroke-dasharray:3}#mermaid-svg-RjoXkfIpkUyRwr5D #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-RjoXkfIpkUyRwr5D #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-RjoXkfIpkUyRwr5D #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-RjoXkfIpkUyRwr5D #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-RjoXkfIpkUyRwr5D #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-RjoXkfIpkUyRwr5D #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-RjoXkfIpkUyRwr5D #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-RjoXkfIpkUyRwr5D #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-RjoXkfIpkUyRwr5D .commit-id,#mermaid-svg-RjoXkfIpkUyRwr5D .commit-msg,#mermaid-svg-RjoXkfIpkUyRwr5D .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-RjoXkfIpkUyRwr5D .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-RjoXkfIpkUyRwr5D .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-RjoXkfIpkUyRwr5D g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-RjoXkfIpkUyRwr5D g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-RjoXkfIpkUyRwr5D g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-RjoXkfIpkUyRwr5D g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-RjoXkfIpkUyRwr5D g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-RjoXkfIpkUyRwr5D g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-RjoXkfIpkUyRwr5D .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-RjoXkfIpkUyRwr5D .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-RjoXkfIpkUyRwr5D .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-RjoXkfIpkUyRwr5D .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-RjoXkfIpkUyRwr5D .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-RjoXkfIpkUyRwr5D .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-RjoXkfIpkUyRwr5D .edgeLabel text{fill:#333}#mermaid-svg-RjoXkfIpkUyRwr5D .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-RjoXkfIpkUyRwr5D .node circle.state-start{fill:black;stroke:black}#mermaid-svg-RjoXkfIpkUyRwr5D .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-RjoXkfIpkUyRwr5D #statediagram-barbEnd{fill:#9370db}#mermaid-svg-RjoXkfIpkUyRwr5D .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-RjoXkfIpkUyRwr5D .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-RjoXkfIpkUyRwr5D .statediagram-state .divider{stroke:#9370db}#mermaid-svg-RjoXkfIpkUyRwr5D .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-RjoXkfIpkUyRwr5D .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-RjoXkfIpkUyRwr5D .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-RjoXkfIpkUyRwr5D .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-RjoXkfIpkUyRwr5D .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-RjoXkfIpkUyRwr5D .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-RjoXkfIpkUyRwr5D .note-edge{stroke-dasharray:5}#mermaid-svg-RjoXkfIpkUyRwr5D .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-RjoXkfIpkUyRwr5D .error-icon{fill:#522}#mermaid-svg-RjoXkfIpkUyRwr5D .error-text{fill:#522;stroke:#522}#mermaid-svg-RjoXkfIpkUyRwr5D .edge-thickness-normal{stroke-width:2px}#mermaid-svg-RjoXkfIpkUyRwr5D .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-RjoXkfIpkUyRwr5D .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-RjoXkfIpkUyRwr5D .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-RjoXkfIpkUyRwr5D .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-RjoXkfIpkUyRwr5D .marker{fill:#333}#mermaid-svg-RjoXkfIpkUyRwr5D .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-RjoXkfIpkUyRwr5D {color: rgba(0, 0, 0, 0.75);font: ;}GeometryGeometryCollectionMultiPointMultiLineStringMultiPolygon#geometries0..*

3.4 曲线几何体

GeoTools 扩展了这些核心 Geometry 类以支持曲线。这些实现生成坐标,允许它们充当正常的 JTS 几何图形(根据 JTS 操作的要求)。

#mermaid-svg-histNKJFnJ7F1AXz .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-histNKJFnJ7F1AXz .label text{fill:#333}#mermaid-svg-histNKJFnJ7F1AXz .node rect,#mermaid-svg-histNKJFnJ7F1AXz .node circle,#mermaid-svg-histNKJFnJ7F1AXz .node ellipse,#mermaid-svg-histNKJFnJ7F1AXz .node polygon,#mermaid-svg-histNKJFnJ7F1AXz .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-histNKJFnJ7F1AXz .node .label{text-align:center;fill:#333}#mermaid-svg-histNKJFnJ7F1AXz .node.clickable{cursor:pointer}#mermaid-svg-histNKJFnJ7F1AXz .arrowheadPath{fill:#333}#mermaid-svg-histNKJFnJ7F1AXz .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-histNKJFnJ7F1AXz .flowchart-link{stroke:#333;fill:none}#mermaid-svg-histNKJFnJ7F1AXz .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-histNKJFnJ7F1AXz .edgeLabel rect{opacity:0.9}#mermaid-svg-histNKJFnJ7F1AXz .edgeLabel span{color:#333}#mermaid-svg-histNKJFnJ7F1AXz .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-histNKJFnJ7F1AXz .cluster text{fill:#333}#mermaid-svg-histNKJFnJ7F1AXz div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-histNKJFnJ7F1AXz .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-histNKJFnJ7F1AXz text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-histNKJFnJ7F1AXz .actor-line{stroke:grey}#mermaid-svg-histNKJFnJ7F1AXz .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-histNKJFnJ7F1AXz .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-histNKJFnJ7F1AXz #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-histNKJFnJ7F1AXz .sequenceNumber{fill:#fff}#mermaid-svg-histNKJFnJ7F1AXz #sequencenumber{fill:#333}#mermaid-svg-histNKJFnJ7F1AXz #crosshead path{fill:#333;stroke:#333}#mermaid-svg-histNKJFnJ7F1AXz .messageText{fill:#333;stroke:#333}#mermaid-svg-histNKJFnJ7F1AXz .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-histNKJFnJ7F1AXz .labelText,#mermaid-svg-histNKJFnJ7F1AXz .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-histNKJFnJ7F1AXz .loopText,#mermaid-svg-histNKJFnJ7F1AXz .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-histNKJFnJ7F1AXz .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-histNKJFnJ7F1AXz .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-histNKJFnJ7F1AXz .noteText,#mermaid-svg-histNKJFnJ7F1AXz .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-histNKJFnJ7F1AXz .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-histNKJFnJ7F1AXz .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-histNKJFnJ7F1AXz .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-histNKJFnJ7F1AXz .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-histNKJFnJ7F1AXz .section{stroke:none;opacity:0.2}#mermaid-svg-histNKJFnJ7F1AXz .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-histNKJFnJ7F1AXz .section2{fill:#fff400}#mermaid-svg-histNKJFnJ7F1AXz .section1,#mermaid-svg-histNKJFnJ7F1AXz .section3{fill:#fff;opacity:0.2}#mermaid-svg-histNKJFnJ7F1AXz .sectionTitle0{fill:#333}#mermaid-svg-histNKJFnJ7F1AXz .sectionTitle1{fill:#333}#mermaid-svg-histNKJFnJ7F1AXz .sectionTitle2{fill:#333}#mermaid-svg-histNKJFnJ7F1AXz .sectionTitle3{fill:#333}#mermaid-svg-histNKJFnJ7F1AXz .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-histNKJFnJ7F1AXz .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-histNKJFnJ7F1AXz .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-histNKJFnJ7F1AXz .grid path{stroke-width:0}#mermaid-svg-histNKJFnJ7F1AXz .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-histNKJFnJ7F1AXz .task{stroke-width:2}#mermaid-svg-histNKJFnJ7F1AXz .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-histNKJFnJ7F1AXz .taskText:not([font-size]){font-size:11px}#mermaid-svg-histNKJFnJ7F1AXz .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-histNKJFnJ7F1AXz .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-histNKJFnJ7F1AXz .task.clickable{cursor:pointer}#mermaid-svg-histNKJFnJ7F1AXz .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-histNKJFnJ7F1AXz .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-histNKJFnJ7F1AXz .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-histNKJFnJ7F1AXz .taskText0,#mermaid-svg-histNKJFnJ7F1AXz .taskText1,#mermaid-svg-histNKJFnJ7F1AXz .taskText2,#mermaid-svg-histNKJFnJ7F1AXz .taskText3{fill:#fff}#mermaid-svg-histNKJFnJ7F1AXz .task0,#mermaid-svg-histNKJFnJ7F1AXz .task1,#mermaid-svg-histNKJFnJ7F1AXz .task2,#mermaid-svg-histNKJFnJ7F1AXz .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-histNKJFnJ7F1AXz .taskTextOutside0,#mermaid-svg-histNKJFnJ7F1AXz .taskTextOutside2{fill:#000}#mermaid-svg-histNKJFnJ7F1AXz .taskTextOutside1,#mermaid-svg-histNKJFnJ7F1AXz .taskTextOutside3{fill:#000}#mermaid-svg-histNKJFnJ7F1AXz .active0,#mermaid-svg-histNKJFnJ7F1AXz .active1,#mermaid-svg-histNKJFnJ7F1AXz .active2,#mermaid-svg-histNKJFnJ7F1AXz .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-histNKJFnJ7F1AXz .activeText0,#mermaid-svg-histNKJFnJ7F1AXz .activeText1,#mermaid-svg-histNKJFnJ7F1AXz .activeText2,#mermaid-svg-histNKJFnJ7F1AXz .activeText3{fill:#000 !important}#mermaid-svg-histNKJFnJ7F1AXz .done0,#mermaid-svg-histNKJFnJ7F1AXz .done1,#mermaid-svg-histNKJFnJ7F1AXz .done2,#mermaid-svg-histNKJFnJ7F1AXz .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-histNKJFnJ7F1AXz .doneText0,#mermaid-svg-histNKJFnJ7F1AXz .doneText1,#mermaid-svg-histNKJFnJ7F1AXz .doneText2,#mermaid-svg-histNKJFnJ7F1AXz .doneText3{fill:#000 !important}#mermaid-svg-histNKJFnJ7F1AXz .crit0,#mermaid-svg-histNKJFnJ7F1AXz .crit1,#mermaid-svg-histNKJFnJ7F1AXz .crit2,#mermaid-svg-histNKJFnJ7F1AXz .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-histNKJFnJ7F1AXz .activeCrit0,#mermaid-svg-histNKJFnJ7F1AXz .activeCrit1,#mermaid-svg-histNKJFnJ7F1AXz .activeCrit2,#mermaid-svg-histNKJFnJ7F1AXz .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-histNKJFnJ7F1AXz .doneCrit0,#mermaid-svg-histNKJFnJ7F1AXz .doneCrit1,#mermaid-svg-histNKJFnJ7F1AXz .doneCrit2,#mermaid-svg-histNKJFnJ7F1AXz .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-histNKJFnJ7F1AXz .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-histNKJFnJ7F1AXz .milestoneText{font-style:italic}#mermaid-svg-histNKJFnJ7F1AXz .doneCritText0,#mermaid-svg-histNKJFnJ7F1AXz .doneCritText1,#mermaid-svg-histNKJFnJ7F1AXz .doneCritText2,#mermaid-svg-histNKJFnJ7F1AXz .doneCritText3{fill:#000 !important}#mermaid-svg-histNKJFnJ7F1AXz .activeCritText0,#mermaid-svg-histNKJFnJ7F1AXz .activeCritText1,#mermaid-svg-histNKJFnJ7F1AXz .activeCritText2,#mermaid-svg-histNKJFnJ7F1AXz .activeCritText3{fill:#000 !important}#mermaid-svg-histNKJFnJ7F1AXz .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-histNKJFnJ7F1AXz g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-histNKJFnJ7F1AXz g.classGroup text .title{font-weight:bolder}#mermaid-svg-histNKJFnJ7F1AXz g.clickable{cursor:pointer}#mermaid-svg-histNKJFnJ7F1AXz g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-histNKJFnJ7F1AXz g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-histNKJFnJ7F1AXz .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-histNKJFnJ7F1AXz .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-histNKJFnJ7F1AXz .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-histNKJFnJ7F1AXz .dashed-line{stroke-dasharray:3}#mermaid-svg-histNKJFnJ7F1AXz #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-histNKJFnJ7F1AXz #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-histNKJFnJ7F1AXz #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-histNKJFnJ7F1AXz #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-histNKJFnJ7F1AXz #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-histNKJFnJ7F1AXz #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-histNKJFnJ7F1AXz #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-histNKJFnJ7F1AXz #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-histNKJFnJ7F1AXz .commit-id,#mermaid-svg-histNKJFnJ7F1AXz .commit-msg,#mermaid-svg-histNKJFnJ7F1AXz .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-histNKJFnJ7F1AXz .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-histNKJFnJ7F1AXz .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-histNKJFnJ7F1AXz g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-histNKJFnJ7F1AXz g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-histNKJFnJ7F1AXz g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-histNKJFnJ7F1AXz g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-histNKJFnJ7F1AXz g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-histNKJFnJ7F1AXz g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-histNKJFnJ7F1AXz .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-histNKJFnJ7F1AXz .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-histNKJFnJ7F1AXz .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-histNKJFnJ7F1AXz .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-histNKJFnJ7F1AXz .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-histNKJFnJ7F1AXz .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-histNKJFnJ7F1AXz .edgeLabel text{fill:#333}#mermaid-svg-histNKJFnJ7F1AXz .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-histNKJFnJ7F1AXz .node circle.state-start{fill:black;stroke:black}#mermaid-svg-histNKJFnJ7F1AXz .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-histNKJFnJ7F1AXz #statediagram-barbEnd{fill:#9370db}#mermaid-svg-histNKJFnJ7F1AXz .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-histNKJFnJ7F1AXz .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-histNKJFnJ7F1AXz .statediagram-state .divider{stroke:#9370db}#mermaid-svg-histNKJFnJ7F1AXz .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-histNKJFnJ7F1AXz .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-histNKJFnJ7F1AXz .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-histNKJFnJ7F1AXz .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-histNKJFnJ7F1AXz .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-histNKJFnJ7F1AXz .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-histNKJFnJ7F1AXz .note-edge{stroke-dasharray:5}#mermaid-svg-histNKJFnJ7F1AXz .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-histNKJFnJ7F1AXz .error-icon{fill:#522}#mermaid-svg-histNKJFnJ7F1AXz .error-text{fill:#522;stroke:#522}#mermaid-svg-histNKJFnJ7F1AXz .edge-thickness-normal{stroke-width:2px}#mermaid-svg-histNKJFnJ7F1AXz .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-histNKJFnJ7F1AXz .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-histNKJFnJ7F1AXz .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-histNKJFnJ7F1AXz .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-histNKJFnJ7F1AXz .marker{fill:#333}#mermaid-svg-histNKJFnJ7F1AXz .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-histNKJFnJ7F1AXz {color: rgba(0, 0, 0, 0.75);font: ;}«interface»CompoundCurvedGeometry«interface»MultiCurvedGeometryGeometryLineStringPolygonLinearRingCompoundRingCompoundVurveCircularRingCircularStringSingleCurvedGeometryMultiLineStringMultiCurve#shell0..1#holes0..*

4. 创建点要素

4.1 创建单点

4.1.1 通过坐标对象Coordinate创建

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

4.1.2 通过WKT创建

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

4.2 创建多点

我们先查看一下geometryFactory关于createMultiPoint的方法:

GeometryFactory#createMultiPoint(Point[]);
GeometryFactory#createMultiPoint(Coordinate[]);
GeometryFactory#createMultiPoint(CoordinateSequence);

前两个构造方法我们很好理解,通过上面提到的都能实现。那么CoordinateSequence是个什么鬼?他通过什么机制实现多点的呢?他的实现类很多,我们以CoordinateSequence2D为例,通过查看他的成员变量和构造方法来了解一下他的实现机制:

//成员变量
private final double[] x;
private final double[] y;
//重要构造方法
public CoordinateSequence2D(double... xy) {if (xy == null) {x = new double[0];y = new double[0];} else {if (xy.length % 2 != 0) {throw new IllegalArgumentException("xy must have an even number of values");}x = new double[xy.length / 2];y = new double[xy.length / 2];for (int i = 0, k = 0; k < xy.length; i++, k += 2) {x[i] = xy[k];y[i] = xy[k + 1];}}
}

通过构造方法我们知道他是通过传递偶数个双精度类型数据创建XY点的集合。如果我们要创建一个二维的多点(1,1),(2,2),(3,3),那么代码应该是这么写:

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

当然,我们也可以通过WKT去创建多点:

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

5. 创建线要素

5.1 创建单线

线要素的创建也包含两种方式。

5.1.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);

上面我们提到可以通过CoordinateSequence创建多点,那么这个可以创建线串吗?答案是肯定的,GeometryFactory有一个重载方法就是GeometryFactory#createLineString(CoordinateSequence)

GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
CoordinateSequence coordinateSequence = new CoordinateSequence2D(0,2, 2,0, 8,6);
LineString line = geometryFactory.createLineString(coordinateSequence);

5.1.2 通过WKT创建

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

5.2 创建多线

创建多线还是很简单的,这里就给出方法说明,大家可以自行尝试。

GeometryFactory#createMultiLineString(LineString[])

当然也可以通过WKT创建。上面提供了多线的WKT语法,有兴趣的可以自行尝试一下。

6. 创建面要素

6.1 创建单面

6.1.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 );

这里需要注意两点:

  • 提供的坐标串开始坐标点要和结束坐标点保持一致。
  • 在createPolygon方法中,第二个参数是洞的意思。在土地管理的术语叫飞地。还是不清楚的可以看一下中国地图,河北的与北京的关系。不过北京在这就不能叫飞地。不过要说最厉害的飞地,非北京市双河农场莫属,它位于黑龙江齐齐哈尔市甘南县境内嫩江左岸,大兴安岭南坡与松嫩平原夏界处,占地380平万公里,距北京1060公里,是中国“飞”得最远的一块飞地。

6.1.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.2 创建多面

GeometryFactory#createMultiPolygon(Polygon[])

当然也可以通过WKT创建。上面提供了多面的WKT语法,有兴趣的可以自行尝试一下。

7. 强大的WKTReader

有没有觉得WKTReader的强大之处?不管是什么类型的要素(点、线、面),通过WKT字符串始终能返回一个正确的地理实体要素。他是怎么做到的呢?为什么我们可以这么肆无忌惮的类型强转呢?我觉得这一个最重要的功劳还是归功于Java的继承特性。因为他返回的是Geometry对象,而其他要素基本都继承了这个类,在这里,相信大家对于java继承的特性有了更深的理解。而真正的实现是什么样子的呢?

private Geometry readGeometryTaggedText() throws IOException, ParseException {String type = null;try{type = getNextWord();}catch(IOException e){return null;}catch(ParseException e){return null;}if (type.equalsIgnoreCase("POINT")) {return readPointText();}else if (type.equalsIgnoreCase("LINESTRING")) {return readLineStringText();}else if (type.equalsIgnoreCase("LINEARRING")) {return readLinearRingText();}else if (type.equalsIgnoreCase("POLYGON")) {return readPolygonText();}else if (type.equalsIgnoreCase("MULTIPOINT")) {return readMultiPointText();}else if (type.equalsIgnoreCase("MULTILINESTRING")) {return readMultiLineStringText();}else if (type.equalsIgnoreCase("MULTIPOLYGON")) {return readMultiPolygonText();}else if (type.equalsIgnoreCase("GEOMETRYCOLLECTION")) {return readGeometryCollectionText();}parseErrorWithLine("Unknown geometry type: " + type);// should never reach herereturn null;}

有没有嗅到了代码的坏味道?搞了这么多if-elseif-else。这样应该又两个不足:

  • 代码很臃肿。这么一长串代码,虽然结构清晰,但是还是不能一眼看明白。
  • 可扩展行差。在文章的开始,我们知道WKT表示的几何实体有11种,而这里只实现了8种,以后还是有扩展的潜力的。如果后期在增加类型,我们不得不修改源代码。

那么有没有一种简单的处理方式呢?我的不一定是最好,也许从性能上还不如这段代码,但仅仅是表达一下我的思路。我们可以创建一个Map集合,可以通过反射的方式去实现逻辑。

8. 几何要素的一些空间分析

8.1 几何体的基本信息

  • getArea() - 以与坐标相同的单位返回的区域(小心纬度/经度数据!)
  • getCentroid() - 几何的中心
  • getEnvelope() - 返回一个可能不是你想要的几何
  • getEnvelopeInternal() - 这将返回一个有用的信封
  • getInteriorPoint() - 几何的中心(实际上是在几何上)

8.2 几何体的空间关系

  • disjoint(Geometry) - 与“不”相交相同
  • touches(Geometry) - 几何必须只是接触,交叉或重叠将不起作用
  • intersects(Geometry)
  • crosses(Geometry)
  • within(Geometry) - 几何内部必须是完整的
  • contains(Geometry)
  • overlaps(Geometry) - 必须实际重叠边缘,在里面或接触是行不通的
  • covers(Geometry)
  • coveredBy(Geometry)
  • relate(Geometry, String)- 允许对关系进行一般检查
  • relate(Geometry)

8.3 几何体运算空间计算

  • intersection(Geometry)
  • union(Geometry)
  • difference(Geometry)
  • symDifference(Geometry)

8.4 最有用的功能

  • distance(Geometry) - 两个几何体的距离
  • buffer(double) - 用于缓冲几何体的边缘以生成多边形
  • union() - 用于几何集合以生成单个几何

8.5 几何的构造信息

  • getGeometryFactory()
  • getPreceisionModel()
  • toText() - 几何的 WKT 表示
  • getGeoemtryType()-称为工厂方法(即pointlinestring等。)

GeoTools入门(四)-- 创建shape要素相关推荐

  1. 客户体验模型|客户体验分析的四个关键要素

    近年来,很多公司启动了"客户体验管理"项目. 公司上下为此协调了众多部门,投入了大量的人力和资源,同时也抱着对客户体验的巨大的期望. 客户体验分析是收集和分析有关用户如何体验你的网 ...

  2. (转载)MFC入门(四)  作者 zhoujiamurong

    关键字 MFC 原作者姓名 zhoujiamurong 介绍 这一节,介绍工具条和状态栏 读者评分 71 评分次数 18 正文 MFC入门(四) 工具条和状态栏 原创  作者:zhoujiamuron ...

  3. 一、SpringMVC基础入门,创建一个HelloWorld程序

    一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 1 2 3 4 5 6 ...

  4. libvirt入门并创建第一个虚拟机

    libvirt入门并创建第一个虚拟机 在第3章,设置独立的KVM虚拟化,您安装并启动的libvirtd服务.还向您介绍了libvirt工具virt-manager和virsh,它们可以帮助您管理虚拟机 ...

  5. 微信小程序快速入门+四个实战小程序(一)——入门准备

    一)系列达成目标介绍 二)小程序创建的准备 1)注册开发者账号 2)下载编译器 ------------------------------------------------------ 一)系列达 ...

  6. GIS VBA 创建界址点要素

    江苏省地质测绘院 姜法明 本文介绍ArcMap VBA二次开发创建界址点的方法,宗地图层(面要素)有6426个宗地(要素),共有节点714403个,利用数据切片技术筛选重合点,得到 390994 个界 ...

  7. Python 爬虫入门四——代理服务器

    Python 爬虫入门<四> 标签:代理服务器 在我们做爬虫的时候,对弈同一个网页,我们爬取次数多了之后,服务器会屏蔽我们的IP,所以,我们要解决这个问题,不然每次访问,就把自己Ip屏蔽了 ...

  8. Hadoop入门(四)——模板虚拟机环境准备(图文详解步骤2021)

    Hadoop入门(四)--模板虚拟机环境准备(图文详解步骤2021) 系列文章传送门 这个系列文章传送门: Hadoop入门(一)--CentOS7下载+VM上安装(手动分区)图文步骤详解(2021) ...

  9. WPF入门(四)-线形区域Path内容填充之填充图(ImageBrush)

    WPF入门(四)->线形区域Path内容填充之填充图(ImageBrush) 原文:WPF入门(四)->线形区域Path内容填充之填充图(ImageBrush) 前面我们提到了Linear ...

最新文章

  1. 古朴西安:乘汽船去机场
  2. Google Guava Collections 使用介绍
  3. xml层级工具_.NET的类型层次查看工具,ClassHierarchyViewer,0.3.0.1
  4. Oracle dbms_job管理
  5. 刚刚,华为发布全球首款 5G 基站核心芯片!
  6. java web 对cookie技术、session技术进行小结
  7. 【Python-2.7】换行符和制表符
  8. 图像金字塔——实现图像融合
  9. java两数相乘的函数_jquery 加法 乘法运算 精确计算函数
  10. 【紫书】UVA714 抄书 Copying Books
  11. element-ui+vue给登录界面创建一个走马灯幻灯片切换
  12. 测试环境Hosts设置
  13. net core WebApi——文件分片上传与跨域请求处理
  14. JS如何在高德地图多边形覆盖物填充平行折线的算法
  15. 记一次360众测仿真实战靶场考核WP
  16. OpenCV之识别银行卡号
  17. 【Java-----字符串数组,访问字符串中字符与字符串长度】
  18. 用计算机的声音编辑工具录制一段语音信号,语音信号的频谱分析实验指导
  19. 【清华牛人】Stanford, Caltech双料博士
  20. visual c++ 棋牌类游戏编程实例

热门文章

  1. Cadence Allegro输出光绘文件(底片)方法图文教程及视频演示
  2. 发现一只野生无知的小宾
  3. 弹性力学的矩阵形式和张量形式
  4. 2017年11月学习心得报告
  5. 华中科大校长李培根在2010毕业典礼的讲话
  6. Bag of Freebies(免费包)和Bag-of-Specials(特赠包)
  7. 中医的诊断技术是落后的,思想方法是片面的
  8. The 2021 CCPC Guangzhou Onsite C. Necklace
  9. 云服务器的安全组规则是什么,腾讯云服务器安全组规则怎么写
  10. Python数据分析实战:降雨量统计分析报告分析