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 简单功能适用于Point、LineString和Polygon,每个几何体都可以包含在一个边界中(充当包含所有几何坐标的边界框),类图如下:
#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()
-称为工厂方法(即point
,linestring
等。)
GeoTools入门(四)-- 创建shape要素相关推荐
- 客户体验模型|客户体验分析的四个关键要素
近年来,很多公司启动了"客户体验管理"项目. 公司上下为此协调了众多部门,投入了大量的人力和资源,同时也抱着对客户体验的巨大的期望. 客户体验分析是收集和分析有关用户如何体验你的网 ...
- (转载)MFC入门(四) 作者 zhoujiamurong
关键字 MFC 原作者姓名 zhoujiamurong 介绍 这一节,介绍工具条和状态栏 读者评分 71 评分次数 18 正文 MFC入门(四) 工具条和状态栏 原创 作者:zhoujiamuron ...
- 一、SpringMVC基础入门,创建一个HelloWorld程序
一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 1 2 3 4 5 6 ...
- libvirt入门并创建第一个虚拟机
libvirt入门并创建第一个虚拟机 在第3章,设置独立的KVM虚拟化,您安装并启动的libvirtd服务.还向您介绍了libvirt工具virt-manager和virsh,它们可以帮助您管理虚拟机 ...
- 微信小程序快速入门+四个实战小程序(一)——入门准备
一)系列达成目标介绍 二)小程序创建的准备 1)注册开发者账号 2)下载编译器 ------------------------------------------------------ 一)系列达 ...
- GIS VBA 创建界址点要素
江苏省地质测绘院 姜法明 本文介绍ArcMap VBA二次开发创建界址点的方法,宗地图层(面要素)有6426个宗地(要素),共有节点714403个,利用数据切片技术筛选重合点,得到 390994 个界 ...
- Python 爬虫入门四——代理服务器
Python 爬虫入门<四> 标签:代理服务器 在我们做爬虫的时候,对弈同一个网页,我们爬取次数多了之后,服务器会屏蔽我们的IP,所以,我们要解决这个问题,不然每次访问,就把自己Ip屏蔽了 ...
- Hadoop入门(四)——模板虚拟机环境准备(图文详解步骤2021)
Hadoop入门(四)--模板虚拟机环境准备(图文详解步骤2021) 系列文章传送门 这个系列文章传送门: Hadoop入门(一)--CentOS7下载+VM上安装(手动分区)图文步骤详解(2021) ...
- WPF入门(四)-线形区域Path内容填充之填充图(ImageBrush)
WPF入门(四)->线形区域Path内容填充之填充图(ImageBrush) 原文:WPF入门(四)->线形区域Path内容填充之填充图(ImageBrush) 前面我们提到了Linear ...
最新文章
- 古朴西安:乘汽船去机场
- Google Guava Collections 使用介绍
- xml层级工具_.NET的类型层次查看工具,ClassHierarchyViewer,0.3.0.1
- Oracle dbms_job管理
- 刚刚,华为发布全球首款 5G 基站核心芯片!
- java web 对cookie技术、session技术进行小结
- 【Python-2.7】换行符和制表符
- 图像金字塔——实现图像融合
- java两数相乘的函数_jquery 加法 乘法运算 精确计算函数
- 【紫书】UVA714 抄书 Copying Books
- element-ui+vue给登录界面创建一个走马灯幻灯片切换
- 测试环境Hosts设置
- net core WebApi——文件分片上传与跨域请求处理
- JS如何在高德地图多边形覆盖物填充平行折线的算法
- 记一次360众测仿真实战靶场考核WP
- OpenCV之识别银行卡号
- 【Java-----字符串数组,访问字符串中字符与字符串长度】
- 用计算机的声音编辑工具录制一段语音信号,语音信号的频谱分析实验指导
- 【清华牛人】Stanford, Caltech双料博士
- visual c++ 棋牌类游戏编程实例
热门文章
- Cadence Allegro输出光绘文件(底片)方法图文教程及视频演示
- 发现一只野生无知的小宾
- 弹性力学的矩阵形式和张量形式
- 2017年11月学习心得报告
- 华中科大校长李培根在2010毕业典礼的讲话
- Bag of Freebies(免费包)和Bag-of-Specials(特赠包)
- 中医的诊断技术是落后的,思想方法是片面的
- The 2021 CCPC Guangzhou Onsite C. Necklace
- 云服务器的安全组规则是什么,腾讯云服务器安全组规则怎么写
- Python数据分析实战:降雨量统计分析报告分析