@mapgis/webclient-common
Version:
mapgis ES6 format for igserver
1,907 lines (1,104 loc) • 187 kB
HTML
<header id="page-title" class="page-title">
<span class="page-title-main">类名</span>
<span class="page-title-sub">GeometryEngine</span>
</header>
<section>
<article>
<div class="container-overview">
<div class='vertical-section'>
<div class="members">
<div class="member">
<h4 class="name" id="GeometryEngine">
<a class="href-link" href="#GeometryEngine">#</a>
<span class="code-name" id="GeometryEngine" style="font-size:30px">
new GeometryEngine<span class="signature">()</span>
</span>
</h4>
<div class="description">
<p>几何分析工具</p>
</div>
<dl class="details">
</dl>
<p class="summary"><h5>支持如下方法:</h5>
<a href='#contains'>[1、是否包含(contains)]</a><br/>
<a href='#crosses'>[2、是否穿过]</a><br/>
<a href='#cut'>[3、几何切割]</a><br/>
<a href='#difference'>[4、几何求差]</a><br/>
<a href='#disjoint'>[5、是否相离]</a><br/>
<a href='#equals'>[6、是否相等]</a><br/>
<a href='#intersects'>[7、是否相交]</a><br/>
<a href='#intersect'>[8、返回两个几何对象的相交部分]</a><br/>
<a href='#nearestCoordinate'>[9、距离最近的点]</a><br/>
<a href='#overlaps'>[10、是否重叠]</a><br/>
<a href='#planarArea'>[11、计算平面面积]</a><br/>
<a href='#planarLength'>[12、计算平面长度]</a><br/>
<a href='#geodesicLength'>[13、计算地理长度]</a><br/>
<a href='#rotate'>[14、旋转]</a><br/>
<a href='#distance'>[15、计算距离]</a><br/>
<a href='#touches'>[16、是否相邻]</a><br/>
<a href='#union'>[17、求并]</a><br/>
<a href='#within'>[18、是否被包含(within)]</a><br/>
<a href='#buffer'>[19、缓冲区分析]</a><br/>
<a href='#isSimple'>[20、拓扑检查]</a><br/>
<a href='#getPositionsFromArc'>[21、通过三点弧段构造一组离散的点坐标]</a><br/>
<a href='#getArcFromGeometry'>[22、通过几何中的三点弧段数据,构造离散后的几何对象]</a><br/>
<a href='#getCenter'>[23、通过三个点求圆心]</a><br/>
<a href='#getAngleFromPoints'>[24、计算三点之间的夹角]</a><br/>
<a href='#simplify'>[25、拓扑矫正]</a><br/>
<a href='#getCenterOID'>[26、获取几何中心点]</a><br/></p>
</div>
</div>
</div>
</div>
<div class='vertical-section'>
<h3 id='function'>方法</h3>
<h4 style="margin-top: 20px;margin-bottom: 20px;">方法概述</h4>
<div class="members">
<div class="table-container">
<table class="params table">
<thead>
<tr>
<th>名称</th>
<th>返回值类型</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr class="deep-level-0">
<td class="name"><code><a href="GeometryEngine.html#buffer">buffer</a></code></td>
<td class="name">
<code>
<span class="param-type"><a class="mapgis-link-name" title="Geometry" Geometry.html>Geometry</a></span>
|
<span class="param-type">Array.<<a href="Geometry.html">Geometry</a>></span>
</code>
</td>
<td class="name"><code><p><a id='buffer'></a>
缓冲区分析;<br/>
支持点几何、多点几何、线几何、多线几何、区几何、多区几何、矩形几何、圆形几何或任意几何组成的几何数组;<br/>
忽略三维高度,当geometry为几何数组时,其子元素的坐标系必须相同;<br/>
如果distance是数字,则可以为正值或负值,是正值则向外扩张,是负值,则表示向内收缩;<br/>
如果distance是数字,且geometry为几何数组,则该数字会应用到所有geometry数组的子元素;<br/>
如果distance是数组且geometry是数组,当distance的长度小于geometry数组的长度时,会以distance的最后一个子元素扩充distance数组,使其长度和geometry数组的长度相同,之后将distance数组和geometry数组根据下标一一对应,执行缓冲区分析;<br/>
如果distance是数组,但geometry不是数组,则使distance数组的第一个子元素做为缓冲距离来执行缓冲区分析;<br/>
注意一个或多个几何执行缓冲区分析后,由于缓冲后几何扩大,可能导致一个或多个几何出现重合的情况;;<br/>
示例如下:<br/>
<a href='#buffer1'>[1、区缓冲分析]</a><br/>
<a href='#buffer2'>[2、多区缓冲分析]</a><br/>
<a href='#buffer3'>[3、几何数组缓冲区分析]</a><br/>
<a href='#buffer4'>[4、几何数组缓冲区分析 - 结果几何合并]</a><br/>
<a href='#buffer5'>[5、区缓冲分析 - 自定义坐标系]</a><br/>
<a href='#buffer6'>[6、点缓冲分析]</a><br/>
<a href='#buffer7'>[7、线缓冲分析]</a><br/>
<a href='#buffer8'>[8、矩形缓冲分析]</a><br/>
<a href='#buffer9'>[9、圆形缓冲分析]</a><br/></p></code></td>
</tr>
<tr class="deep-level-0">
<td class="name"><code><a href="GeometryEngine.html#contains">contains</a></code></td>
<td class="name">
<code>
<span class="param-type">Boolean</span>
</code>
</td>
<td class="name"><code><p><a id='contains'></a>
判断containerGeometry对象是否完全包含insideGeometry对象;<br/>
忽略三维高度;<br/>
支持自定义坐标系的几何对象,几何的坐标系必须相同;<br/>
包含标准如下:
点包含点的标准为:两个点几何坐标是否相等;<br/>
线包含线的标准为:一条线上的点都在另一条线上,或两条线的点坐标相同;<br/>
区包含线的标准为:线在区几何内,但线不全部在区几何边线上(包括内圈和外圈的边线);<br/>
区包含线的标准为:点在区几何内,不在边线上(包括内圈和外圈的边线);<br/>
区包含区的标准为:一个区在另一个区内(如果有带洞区域,则不能在带洞区域内,可以挨着边线),边线可以重合;<br/>
其他情况为上述标准的组合;<br/>
由于包含的情况太多,这里仅列举部分示例,示例如下:<br/>
<a href='#intersects1'>[1、区包含点]</a><br/>
<a href='#intersects2'>[2、多点包含点]</a><br/>
<a href='#intersects3'>[3、区包含线]</a><br/>
<a href='#intersects4'>[4、圆包含矩形]</a><br/>
<a href='#intersects5'>[5、几何包含 - 自定义坐标系]</a><br/></p></code></td>
</tr>
<tr class="deep-level-0">
<td class="name"><code><a href="GeometryEngine.html#crosses">crosses</a></code></td>
<td class="name">
<code>
<span class="param-type">Boolean</span>
</code>
</td>
<td class="name"><code><p><a id='crosses'></a>
判断一个几何对象是否穿过另一个几何对象;<br/>
要穿过的几何类型为:线、多线,忽略三维高度;<br/>
被穿过的几何类型为:线、多线、矩形、圆、区以及多区,忽略三维高度,穿线和被穿过几何的坐标系必须相同;<br/>
要穿过的几何与被穿过的几何(geometry1和geometry2)可以调换输入,但其中一个geometry必须是LineString、MultiLineString中的一类;<br/>
当被穿过的几何类型为MultiLineString、MultiPolygon时,只要MultiLineString和MultiPolygon中有一个要素被穿过,就算穿过,返回true;<br/>
当要穿过的几何类型为MultiLineString时,只要MultiLineString中有一条线穿过geometry2(被穿过的几何体),就算穿过,返回true;<br/>
如果两条线出现重叠,此种情况不算穿过,返回false;<br/
如果两条线出现“入”型、“L”型,此种情况不算穿过,返回false;<br/>
线与圆相切的情况不算穿过,返回false;<br/>
线和多边形的一条边重叠,算穿过,返回true;<br/>
当polygon有内圈时,只要穿过外圈就算穿过,返回true;<br/>
示例如下:<br/>
<a href='#cross1'>[1、线穿过线]</a><br/>
<a href='#cross2'>[2、线穿过多线]</a><br/>
<a href='#cross3'>[3、线穿过区]</a><br/>
<a href='#cross4'>[4、多线穿过区]</a><br/>
<a href='#cross5'>[5、多线穿过多区]</a><br/></p></code></td>
</tr>
<tr class="deep-level-0">
<td class="name"><code><a href="GeometryEngine.html#cut">cut</a></code></td>
<td class="name">
<code>
<span class="param-type">Array.<<a href="Geometry.html">Geometry</a>></span>
</code>
</td>
<td class="name"><code><p><a id='cut'></a>
使用一条线来切割几何,将其分割为多个几何对象;<br/>
被切割的几何类型为:线、多线、区以及多区,忽略三维高度,切线和被切割几何的坐标系必须相同;<br/>
此接口不会像arcgis的geometryEngine.cut方法那样,返回切割线左右两边的几何对象数组,而是把所有的被切割好的几何组成一个数组并返回;<br/>
如果切割线和被切割几何没有相交,则会返回一个空数组;<br/>
线切割线会返回被切割后的线几何数组;<br/>
线切割多线仅会返回被切割后的线几何数组,如果多线中的某一个线段不与切割线相交,则不会返回该线段几何;<br/>
线切割区会返回被切割后的区几何数组,如果切线仅仅是部分和区相交,但是没有穿过几何,会返回一个仅包含该区几何对像的数组;<br/>
线切割多区仅会返回被切割后的区几何数组,如果多区中的某一个区不与切割线相交,则不会返回该区几何;<br/>
示例如下:<br/>
<a href='#cut1'>[1、线切割线]</a><br/>
<a href='#cut2'>[2、线切割多线]</a><br/>
<a href='#cut3'>[3、线切割区]</a><br/>
<a href='#cut4'>[4、线切割多区]</a><br/>
<a href='#cut5'>[5、几何切割 - 自定义坐标系]</a><br/></p></code></td>
</tr>
<tr class="deep-level-0">
<td class="name"><code><a href="GeometryEngine.html#difference">difference</a></code></td>
<td class="name">
<code>
<span class="param-type"><a class="mapgis-link-name" title="Polygon" Polygon.html>Polygon</a></span>
|
<span class="param-type"><a class="mapgis-link-name" title="MultiPolygon" MultiPolygon.html>MultiPolygon</a></span>
</code>
</td>
<td class="name"><code><p><a id='difference'></a>
几何求差,即返回inputGeometry几何对象减去subtractGeometry几何对象之后的部分;<br/>
支持区、多区、矩形和圆形之间进行相互求差;<br/>
支持自定义坐标系几何,忽略三维高度;<br/>
求差后可能返回一个区几何或一个多区几何或者一个空对象;<br/>
由于示例太多,仅列举部分示例,示例如下:<br/>
<a href='#difference1'>[1、区和区求差]</a><br/>
<a href='#difference2'>[2、区和多区求差]</a><br/>
<a href='#difference3'>[3、多区和圆形求差]</a><br/>
<a href='#difference4'>[4、矩形和圆求差]</a><br/></p></code></td>
</tr>
<tr class="deep-level-0">
<td class="name"><code><a href="GeometryEngine.html#disjoint">disjoint</a></code></td>
<td class="name">
<code>
<span class="param-type">Boolean</span>
</code>
</td>
<td class="name"><code><p><a id='disjoint'></a>
判断两个几何是否相离,即完全不相交;<br/>
支持自定义坐标系几何对象,两个几何对象的坐标系要一致,忽略三维高度;<br/>
示例如下:<br/>
<a href='#disjoint1'>[是否相离]</a><br/></p></code></td>
</tr>
<tr class="deep-level-0">
<td class="name"><code><a href="GeometryEngine.html#distance">distance</a></code></td>
<td class="name">
<code>
<span class="param-type">Number</span>
</code>
</td>
<td class="name"><code><p><a id='distance'></a>
计算两点之间的距离,坐标系取第一个图层的坐标系</p></code></td>
</tr>
<tr class="deep-level-0">
<td class="name"><code><a href="GeometryEngine.html#equals">equals</a></code></td>
<td class="name">
<code>
<span class="param-type">Boolean</span>
</code>
</td>
<td class="name"><code><p><a id='equals'></a>
判断两个几何是否相等;<br/>
使用如下判断标准:<br/>
1、类型是否相等;<br/>
2、坐标系是否相等;<br/>
3、两个几何的坐标点是否相等;<br/>
支持任意几何类型;<br/></p></code></td>
</tr>
<tr class="deep-level-0">
<td class="name"><code><a href="GeometryEngine.html#geodesicLength">geodesicLength</a></code></td>
<td class="name">
<code>
<span class="param-type">Number</span>
</code>
</td>
<td class="name"><code><p><a id='geodesicLength'></a>
计算地理几何长度;<br/></p></code></td>
</tr>
<tr class="deep-level-0">
<td class="name"><code><a href="GeometryEngine.html#getAngleFromPoints">getAngleFromPoints</a></code></td>
<td class="name">
<code>
<span class="param-type">Number</span>
</code>
</td>
<td class="name"><code><p><a id='getAngleFromPoints'></a>
计算三点之间的夹角</p></code></td>
</tr>
<tr class="deep-level-0">
<td class="name"><code><a href="GeometryEngine.html#getArcFromGeometry">getArcFromGeometry</a></code></td>
<td class="name">
<code>
<span class="param-type"><a class="mapgis-link-name" title="LineString" LineString.html>LineString</a></span>
|
<span class="param-type"><a class="mapgis-link-name" title="MultiLineString" MultiLineString.html>MultiLineString</a></span>
|
<span class="param-type"><a class="mapgis-link-name" title="Polygon" Polygon.html>Polygon</a></span>
|
<span class="param-type"><a class="mapgis-link-name" title="MultiPolygon" MultiPolygon.html>MultiPolygon</a></span>
</code>
</td>
<td class="name"><code><p><a id='getArcFromGeometry'></a>
通过几何中的三点弧段数据,构造离散后的几何对象,类型与原始对象一致</p></code></td>
</tr>
<tr class="deep-level-0">
<td class="name"><code><a href="GeometryEngine.html#getCenter">getCenter</a></code></td>
<td class="name">
<code>
<span class="param-type">Array.<Number></span>
</code>
</td>
<td class="name"><code><p><a id='getCenter'></a>
通过三个点求圆心,数学公式,不用进行投影</p></code></td>
</tr>
<tr class="deep-level-0">
<td class="name"><code><a href="GeometryEngine.html#getCenterOID">getCenterOID</a></code></td>
<td class="name">
<code>
<span class="param-type"><a class="mapgis-link-name" title="Point" Point.html>Point</a></span>
</code>
</td>
<td class="name"><code><p>获取几何中心点
<a id='getCenterOID'></a></p></code></td>
</tr>
<tr class="deep-level-0">
<td class="name"><code><a href="GeometryEngine.html#getEllipseCoordinates">getEllipseCoordinates</a></code></td>
<td class="name">
<code>
<span class="param-type">Array</span>
</code>
</td>
<td class="name"><code><p>获取椭圆离散化点坐标
<a id='simplify'></a></p></code></td>
</tr>
<tr class="deep-level-0">
<td class="name"><code><a href="GeometryEngine.html#getPositionsFromArc">getPositionsFromArc</a></code></td>
<td class="name">
<code>
<span class="param-type">Array</span>
</code>
</td>
<td class="name"><code><p><a id='getPositionsFromArc'></a>
通过三点弧段构造一组离散的点坐标,此组离散点是线几何的点坐标</p></code></td>
</tr>
<tr class="deep-level-0">
<td class="name"><code><a href="GeometryEngine.html#intersect">intersect</a></code></td>
<td class="name">
<code>
<span class="param-type"><a class="mapgis-link-name" title="Geometry" Geometry.html>Geometry</a></span>
|
<span class="param-type">Array.<<a href="Geometry.html">Geometry</a>></span>
</code>
</td>
<td class="name"><code><p><a id='intersect'></a>
计算并返回两个几何对象的相交部分;<br/>
支持任意几何或几何对象数组和另一个几何进行相交,忽略三维高度,坐标系必须相同;<br/>
点和任何几何相交返回点或空对象<br/>
多点和任何几何相交返回点或多点或空对象<br/>
线和任意几何对象相交返回相交点或重叠线或相交点和重叠线或空对象<br/>
区和区、区和多区相交返回区或多区或空对象<br/>
矩形、圆、区、多区之间相交返回区或多区或空对象<br/></p></code></td>
</tr>
<tr class="deep-level-0">
<td class="name"><code><a href="GeometryEngine.html#intersects">intersects</a></code></td>
<td class="name">
<code>
<span class="param-type">Boolean</span>
</code>
</td>
<td class="name"><code><p><a id='intersects'></a>
判断两个几何对象是否相交;<br/>
支持任意几何类型求交;<br/>
支持自定义坐标系的几何对象,两个求交几何的坐标系必须相同,忽略三位高度;<br/>
由于示例太多,这里仅列举部分示例,示例如下:<br/>
<a href='#intersects1'>[1、线和区求交]</a><br/>
<a href='#intersects2'>[2、点和区求交]</a><br/>
<a href='#intersects3'>[3、区和多区求交]</a><br/>
<a href='#intersects4'>[4、矩形和圆形求交]</a><br/>
<a href='#intersects5'>[5、几何求交 - 自定义参考系]</a><br/></p></code></td>
</tr>
<tr class="deep-level-0">
<td class="name"><code><a href="GeometryEngine.html#isSimple">isSimple</a></code></td>
<td class="name">
<code>
<span class="param-type">Boolean</span>
</code>
</td>
<td class="name"><code><p><a id='isSimple'></a>
对几何对象进行拓扑检查;<br/>
支持的几何类型为线、多线、区和多区,支持任意坐标系几何,忽略三维高度;<br/>
线类型的标准为:1、自身的非相邻线段不会自相交(两个线段仅有一个端点重叠不算相交);2、线自身的线段不会重叠;<br/>
多线类型的标准为:1、自身的子线段必须是拓扑正确的;2、子线段不会相交;<br/>
区类型的标准为:1、外圈和内圈满足线类型的拓扑检查标准;2、外圈和内圈、内圈和内圈不会相交;3、内圈不会超过外圈;<br/>
多区类型的标准为:1、自身的子区必须是拓扑正确的;2、子区不会相交;<br/>
示例如下:<br/>
<a href='#isSimple1'>[1、对线几何进行拓扑检查]</a><br/>
<a href='#isSimple2'>[2、对多线几何进行拓扑检查]</a><br/>
<a href='#isSimple3'>[3、对区几何进行拓扑检查]</a><br/>
<a href='#isSimple4'>[4、对多区几何进行拓扑检查]</a><br/></p></code></td>
</tr>
<tr class="deep-level-0">
<td class="name"><code><a href="GeometryEngine.html#nearestCoordinate">nearestCoordinate</a></code></td>
<td class="name">
<code>
<span class="param-type">Project.<<a href="Point.html">Point</a>></span>
</code>
</td>
<td class="name"><code><p><a id='nearestCoordinate'></a>
在几何对象的coordinates中寻找与指定点距离最近的点</p></code></td>
</tr>
<tr class="deep-level-0">
<td class="name"><code><a href="GeometryEngine.html#overlaps">overlaps</a></code></td>
<td class="name">
<code>
<span class="param-type">Boolean</span>
</code>
</td>
<td class="name"><code><p><a id='overlaps'></a>
判断两个几何对象是否重叠,即两个几何相交但不互相包含</p></code></td>
</tr>
<tr class="deep-level-0">
<td class="name"><code><a href="GeometryEngine.html#planarArea">planarArea</a></code></td>
<td class="name">
<code>
<span class="param-type">Number</span>
</code>
</td>
<td class="name"><code><p><a id='planarArea'></a>
计算几何对象的面积;<br/>
仅计算平面面积,忽略地球弧度,当坐标系为WGS84相关坐标系时,也仅会计算平面面积,例如坐标为[[0, 0], [0, 1], [1, 1], [1, 0], [0, 0]]的区几何的面积为1;<br/>
支持自定义坐标系,忽略三维高度;<br/>
支持区、多区、矩形和圆形几何对象;<br/>
当为区或多区几何对象时,若该区带洞或多区的子区带洞,则会减去这些洞的面积;<br/>
示例如下:<br/>
<a href='#planarArea1'>[1、计算区(不带洞)面积]</a><br/>
<a href='#planarArea2'>[2、计算区(带洞)面积]</a><br/>
<a href='#planarArea3'>[3、计算多区面积]</a><br/>
<a href='#planarArea4'>[4、计算圆面积]</a><br/>
<a href='#planarArea5'>[5、计算矩形面积]</a><br/></p></code></td>
</tr>
<tr class="deep-level-0">
<td class="name"><code><a href="GeometryEngine.html#planarLength">planarLength</a></code></td>
<td class="name">
<code>
<span class="param-type">Number</span>
</code>
</td>
<td class="name"><code><p><a id='planarLength'></a>
计算几何长度或周长;<br/>
仅计算平面距离,忽略地球弧度,当坐标系为WGS84相关坐标系时,也仅会计算平面距离,例如坐标为[[0, 0], [0, 1]]的线几何的长度为1;<br/>
支持自定义坐标系,忽略三维高度;<br/>
支持的几何类型为线、多线、区、多区、圆形以及矩形;<br/>
当几何为线时,返回线的长度;<br/>
当几何为多线时,返回多线中子线的长度之和;<br/>
当几何为区、圆形以及矩形时,返回其周长;<br/>
当几何为多区时,返回多区中子区的周长之和;<br/>
示例如下:<br/>
<a href='#planarLength1'>[1、计算几何长度]</a><br/>
<a href='#planarLength2'>[2、计算几何周长]</a><br/></p></code></td>
</tr>
<tr class="deep-level-0">
<td class="name"><code><a href="GeometryEngine.html#rotate">rotate</a></code></td>
<td class="name">
<code>
<span class="param-type"><a class="mapgis-link-name" title="Geometry" Geometry.html>Geometry</a></span>
</code>
</td>
<td class="name"><code><p><a id='rotate'></a>
顺时针旋转几何,支持所有基础几何对象;<br/>
可以指定旋转中心点,当不指定时使用几何质心;<br/>
忽略三维高度;<br/>
支持自定义坐标系几何,几何对象与旋转中心点的坐标系必须一致;<br/>
示例如下:<br/>
<a href='#rotate1'>[1、旋转多点]</a><br/>
<a href='#rotate2'>[2、旋转区]</a><br/>
<a href='#rotate3'>[3、旋转多区]</a><br/>
<a href='#rotate4'>[4、旋转线]</a><br/>
<a href='#rotate5'>[5、旋转多线]</a><br/>
<a href='#rotate6'>[6、旋转矩形]</a><br/>
<a href='#rotate7'>[7、旋转圆形]</a><br/>
<a href='#rotate8'>[8、旋转区 - 自定义坐标系]</a><br/>
<a href='#rotate9'>[9、绕点旋转 - 区]</a><br/>
<a href='#rotate10'>[10、绕点旋转 - 点]</a><br/></p></code></td>
</tr>
<tr class="deep-level-0">
<td class="name"><code><a href="GeometryEngine.html#simplify">simplify</a></code></td>
<td class="name">
<code>
<span class="param-type"><a class="mapgis-link-name" title="Geometry" Geometry.html>Geometry</a></span>
</code>
</td>
<td class="name"><code><p>拓扑矫正
<a id='simplify'></a></p></code></td>
</tr>
<tr class="deep-level-0">
<td class="name"><code><a href="GeometryEngine.html#touches">touches</a></code></td>
<td class="name">
<code>
<span class="param-type">Boolean</span>
</code>
</td>
<td class="name"><code><p><a id='touches'></a>
判断一个几何对象是否和另一个几何对象相邻
被测试相邻关系的几何类型为:线、多线、矩形、圆、区以及多区,忽略三维高度;<br/>
用来测试相邻关系的几何类型为:点、多点、线、多线、矩形、圆、区以及多区,忽略三维高度,穿线和被穿过几何的坐标系必须相同;<br/>
线和点相邻的标准为:点在线的两端,且线不是头尾闭合的;<br/>
对于multi类型的几何(如多点、多线、多区),无论其和任何其他支持的几何类型判断touch,只要multi中的一个与另一个geometry有包含关系、相交关系,touch即为false;<br/>
对于区、线、圆、矩形和多点判断相邻关系时,只有有一个点在区内、线上、矩形内、圆内,touch即为false;<br/>
示例如下:<br/>
<a href='#touch1'>[1、线和点相邻]</a><br/>
<a href='#touch2'>[2、多线和多点相邻]</a><br/>
<a href='#touch3'>[3、区和线相邻]</a><br/>
<a href='#touch4'>[4、多区和区相邻]</a><br/>
<a href='#touch5'>[5、圆和圆相邻]</a><br/></p></code></td>
</tr>
<tr class="deep-level-0">
<td class="name"><code><a href="GeometryEngine.html#union">union</a></code></td>
<td class="name">
<code>
<span class="param-type"><a class="mapgis-link-name" title="Geometry" Geometry.html>Geometry</a></span>
</code>
</td>
<td class="name"><code><p><a id='union'></a>
多个几何对象求并,并返回求并后的新几何对象;<br/>
输入的几何类型必须一致,点和多点、区和多区视为同一个类型,且几何对象的坐标系要一致;<br/>
忽略三维高度;<br>
支持的几何有:点(多点)几何对象、区(多区)几何对象、范围几何对象、圆几何对象<br/>
点和点、点和多点、多点和多点合并为一个多点几何对象,如果有多个点坐标(XYZ)相同,则会去重;<br/>
线和线、线和多线、多线和多线合并为一个线几何对象或多线几何对象;<br/>
区和区、区和多区、多区和多区合并为一个区级和对象或多区几何对象;<br/>
矩形和矩形合并为一个多边形几何对象或一个更大的矩形几何对象;<br/>
圆和圆合并为一个多边形几何对象或一个圆几何对象或两个不相交的圆;</p></code></td>
</tr>
<tr class="deep-level-0">
<td class="name"><code><a href="GeometryEngine.html#within">within</a></code></td>
<td class="name">
<code>
<span class="param-type">Boolean</span>
</code>
</td>
<td class="name"><code><p><a id='within'></a>
判断innerGeometry几何对象是否完全在outerGeometry中</p></code></td>
</tr>
</tbody>
</table>
</div>
<h4 style="margin-top: 20px;margin-bottom: 20px;">方法详情</h4>
<div class="member">
<h4 class="name" id=".buffer">
<a class="href-link" href="#.buffer">#</a>
<span class='tag'>static</span>
<span class="code-name" id="buffer" style="font-size:30px">
buffer<span class="signature">(geometry<span class="signature-attributes">opt</span>, distance<span class="signature-attributes">opt</span>, unit<span class="signature-attributes">opt</span>, unionResults<span class="signature-attributes">opt</span>)</span>
</span>
</h4>
<div class="description">
<p><a id='buffer'></a>
缓冲区分析;<br/>
支持点几何、多点几何、线几何、多线几何、区几何、多区几何、矩形几何、圆形几何或任意几何组成的几何数组;<br/>
忽略三维高度,当geometry为几何数组时,其子元素的坐标系必须相同;<br/>
如果distance是数字,则可以为正值或负值,是正值则向外扩张,是负值,则表示向内收缩;<br/>
如果distance是数字,且geometry为几何数组,则该数字会应用到所有geometry数组的子元素;<br/>
如果distance是数组且geometry是数组,当distance的长度小于geometry数组的长度时,会以distance的最后一个子元素扩充distance数组,使其长度和geometry数组的长度相同,之后将distance数组和geometry数组根据下标一一对应,执行缓冲区分析;<br/>
如果distance是数组,但geometry不是数组,则使distance数组的第一个子元素做为缓冲距离来执行缓冲区分析;<br/>
注意一个或多个几何执行缓冲区分析后,由于缓冲后几何扩大,可能导致一个或多个几何出现重合的情况;;<br/>
示例如下:<br/>
<a href='#buffer1'>[1、区缓冲分析]</a><br/>
<a href='#buffer2'>[2、多区缓冲分析]</a><br/>
<a href='#buffer3'>[3、几何数组缓冲区分析]</a><br/>
<a href='#buffer4'>[4、几何数组缓冲区分析 - 结果几何合并]</a><br/>
<a href='#buffer5'>[5、区缓冲分析 - 自定义坐标系]</a><br/>
<a href='#buffer6'>[6、点缓冲分析]</a><br/>
<a href='#buffer7'>[7、线缓冲分析]</a><br/>
<a href='#buffer8'>[8、矩形缓冲分析]</a><br/>
<a href='#buffer9'>[9、圆形缓冲分析]</a><br/></p>
</div>
<h4>参数</h4>
<div class="table-container">
<table class="params table">
<thead>
<tr>
<th>名称</th>
<th>类型</th>
<th style="min-width: 100px;">默认值</th>
<th class="last">描述</th>
</tr>
</thead>
<tbody>
<tr class="deep-level-0">
<td class="name" id="geometry"><code>geometry</code></td>
<td class="type">
<span class="param-type"><a class="mapgis-link-name" title="Geometry" Geometry.html>Geometry</a></span>
|
<span class="param-type">Array.<<a href="Geometry.html">Geometry</a>></span>
</td>
<td class="default">
null
</td>
<td class="description last"><p>要进行缓冲区分析的几何对象</p></td>
</tr>
<tr class="deep-level-0">
<td class="name" id="distance"><code>distance</code></td>
<td class="type">
<span class="param-type">Number</span>
|
<span class="param-type">Array.<Number></span>
</td>
<td class="default">
1000
</td>
<td class="description last"><p>缓冲距离</p></td>
</tr>
<tr class="deep-level-0">
<td class="name" id="unit"><code>unit</code></td>
<td class="type">
<span class="param-type"><a class="mapgis-link-name" title="LengthUnit" global.html#LengthUnit>LengthUnit</a></span>
</td>
<td class="default">
LengthUnit.meter
</td>
<td class="description last"><p>单位,默认米</p></td>
</tr>
<tr class="deep-level-0">
<td class="name" id="unionResults"><code>unionResults</code></td>
<td class="type">
<span class="param-type">Boolean</span>
</td>
<td class="default">
false
</td>
<td class="description last"><p>是否将返回的多个几何对象合并为单几何对象,默认为false,即不合并几何</p></td>
</tr>
</tbody>
</table>
</div>
<dl class="details">
</dl>
<div class='columns method-parameter'>
<div class="column is-2"><label>返回值</label></div>
<div class="column is-10">
<div class="columns">
<div class='param-desc column is-7'><p>缓冲区分析后的几何对象</p></div>
<div class='column is-5 has-text-left'>
<label>类型: </label>
<span class="param-type"><a class="mapgis-link-name" title="Geometry" Geometry.html>Geometry</a></span>
|
<span class="param-type">Array.<<a href="Geometry.html">Geometry</a>></span>
</div>
</div>
</div>
</div>
<h5>示例</h5>
<p class="code-caption"><h5 id='buffer1'>区缓冲分析</h5></p>
<pre class="prettyprint"><code>// ES5引入方式
const { Polygon, GeometryEngine } = Zondy.Geometry
// ES6引入方式
import { Polygon, GeometryEngine } from "@mapgis/webclient-common"
// 构造多边形
const polygon = new Polygon({
coordinates: [
[
[108.36341, 29.032578],
[116.13094, 29.032578],
[116.13094, 33.273224],
[108.36341, 33.273224],
[108.36341, 29.032578],
]
]
})
// 执行缓冲区分析
const bufferedPolygon = GeometryEngine.buffer(polygon, 100000)</code></pre>
<p class="code-caption"><h5 id='rotate2'>多区缓冲分析</h5></p>
<pre class="prettyprint"><code>// ES5引入方式
const { MultiPolygon, GeometryEngine } = Zondy.Geometry
// ES6引入方式
import { MultiPolygon, GeometryEngine } from "@mapgis/webclient-common"
// 构造多边形
const polygon = new MultiPolygon({
coordinates: [
[
[
[108.36341, 29.032578],
[112.13094, 29.032578],
[112.13094, 33.273224],
[108.36341, 33.273224],
[108.36341, 29.032578],
]
],
[
[
[113.36341, 29.032578],
[116.13094, 29.032578],
[116.13094, 33.273224],
[113.36341, 33.273224],
[113.36341, 29.032578],
]
]
]
})
// 执行缓冲区分析
const bufferedPolygon = GeometryEngine.buffer(polygon, 30000)</code></pre>
<p class="code-caption"><h5 id='buffer3'>几何对象数组的缓冲区分析</h5></p>
<pre class="prettyprint"><code>// ES5引入方式
const { Polygon, MultiPolygon, GeometryEngine } = Zondy.Geometry
// ES6引入方式
import { Polygon, MultiPolygon, GeometryEngine } from "@mapgis/webclient-common"
// 构造多边形
const polygon1 = new MultiPolygon({
coordinates: [
[
[
[110.36341, 29.032578],
[112.13094, 29.032578],
[112.13094, 33.273224],
[110.36341, 33.273224],
[110.36341, 29.032578],
]
],
[
[
[113.36341, 29.032578],
[116.13094, 29.032578],
[116.13094, 33.273224],
[113.36341, 33.273224],
[113.36341, 29.032578],
]
]
]
})
// 构造多边形2
const polygon2 = new Polygon({
coordinates: [
[
[108.36341, 29.032578],
[109.13094, 29.032578],
[109.13094, 33.273224],
[108.36341, 33.273224],
[108.36341, 29.032578],
]
]
})
// 执行缓冲区分析,distance可谓数字或数组
const bufferedPolygon = GeometryEngine.buffer([polygon1, polygon2], [30000, 30000])</code></pre>
<p class="code-caption"><h5 id='buffer4'>几何数组缓冲区分析 - 分析结果几何求并</h5></p>
<pre class="prettyprint"><code>// ES5引入方式
const { Polygon, MultiPolygon, LengthUnit, GeometryEngine } = Zondy.Geometry
// ES6引入方式
import { Polygon, MultiPolygon, LengthUnit, GeometryEngine } from "@mapgis/webclient-common"
// 构造多边形
const polygon1 = new MultiPolygon({
coordinates: [
[
[
[110.36341, 29.032578],
[112.13094, 29.032578],
[112.13094, 33.273224],
[110.36341, 33.273224],
[110.36341, 29.032578],
]
],
[
[
[113.36341, 29.032578],
[116.13094, 29.032578],
[116.13094, 33.273224],
[113.36341, 33.273224],
[113.36341, 29.032578],
]
]
]
})
// 构造多边形2
const polygon2 = new Polygon({
coordinates: [
[
[108.36341, 29.032578],
[109.13094, 29.032578],
[109.13094, 33.273224],
[108.36341, 33.273224],
[108.36341, 29.032578],
]
]
})
// 执行缓冲区分析,设置unionResults参数为true
const bufferedPolygon = GeometryEngine.buffer([polygon1, polygon2], [30000], LengthUnit.meter, true)</code></pre>
<p class="code-caption"><h5 id='buffer5'>区缓冲分析 - 自定义坐标系</h5></p>
<pre class="prettyprint"><code>// ES5引入方式
const { Polygon, SpatialReference, GeometryEngine } = Zondy.Geometry
// ES6引入方式
import { Polygon, SpatialReference, GeometryEngine } from "@mapgis/webclient-common"
// 构造多边形
const polygon = new Polygon({
coordinates: [
[
[-45257.10778559791, 3212885.1836444484],
[705989.8953363781, 3212885.1836444484],
[705989.8953363781, 3691623.86404564],
[-45257.10778559791, 3691623.86404564],
[-45257.10778559791, 3212885.1836444484],
]
],
// 注意要指定坐标系
spatialReference: new SpatialReference({
wkid: 4547
})
})
// 执行缓冲区分析
const bufferedPolygon = GeometryEngine.buffer(polygon, 100000)</code></pre>
<p class="code-caption"><h5 id='buffer6'>点缓冲分析</h5></p>
<pre class="prettyprint"><code>// ES5引入方式
const { Point, GeometryEngine } = Zondy.Geometry
// ES6引入方式
import { Point, GeometryEngine } from "@mapgis/webclient-common"
// 构造点几何
const point = new Point({
coordinates: [108.36341, 29.032578]
})
// 执行缓冲区分析
const bufferedPolygon = GeometryEngine.buffer(point, 100000)</code></pre>
<p class="code-caption"><h5 id='buffer7'>线缓冲分析</h5></p>
<pre class="prettyprint"><code>// ES5引入方式
const { LineString, GeometryEngine } = Zondy.Geometry
// ES6引入方式
import { LineString, GeometryEngine } from "@mapgis/webclient-common"
// 构造线
const lineString = new LineString({
coordinates: [
[108.36341, 29.032578],
[109.36341, 29.032578]
]
})
// 执行缓冲区分析
const bufferedPolygon = GeometryEngine.buffer(lineString, 10000)</code></pre>
<p class="code-caption"><h5 id='buffer8'>矩形缓冲分析</h5></p>
<pre class="prettyprint"><code>// ES5引入方式
const { LineString, GeometryEngine } = Zondy.Geometry
// ES6引入方式
import { LineString, GeometryEngine } from "@mapgis/webclient-common"
// 构造矩形
const extent = new Extent({
xmin: 112,
xmax: 114,
ymin: 30,
ymax: 32
})
// 执行缓冲区分析
const bufferedPolygon = GeometryEngine.buffer(extent, 10000)</code></pre>
<p class="code-caption"><h5 id='buffer9'>圆形缓冲分析</h5></p>
<pre class="prettyprint"><code>// ES5引入方式
const { Circle, GeometryEngine } = Zondy.Geometry
// ES6引入方式
import { Circle, GeometryEngine } from "@mapgis/webclient-common"
// 构造圆形
const circle = new Circle({
center: [112, 30],
radius: 3
})
// 执行缓冲区分析
const bufferedPolygon = GeometryEngine.buffer(circle, 10000)</code></pre>
</div>
<div class="member">
<h4 class="name" id=".contains">
<a class="href-link" href="#.contains">#</a>
<span class='tag'>static</span>
<span class="code-name" id="contains" style="font-size:30px">
contains<span class="signature">(containerGeometry<span class="signature-attributes">opt</span>, insideGeometry<span class="signature-attributes">opt</span>)</span>
</span>
</h4>
<div class="description">
<p><a id='contains'></a>
判断containerGeometry对象是否完全包含insideGeometry对象;<br/>
忽略三维高度;<br/>
支持自定义坐标系的几何对象,几何的坐标系必须相同;<br/>
包含标准如下:
点包含点的标准为:两个点几何坐标是否相等;<br/>
线包含线的标准为:一条线上的点都在另一条线上,或两条线的点坐标相同;<br/>
区包含线的标准为:线在区几何内,但线不全部在区几何边线上(包括内圈和外圈的边线);<br/>
区包含线的标准为:点在区几何内,不在边线上(包括内圈和外圈的边线);<br/>
区包含区的标准为:一个区在另一个区内(如果有带洞区域,则不能在带洞区域内,可以挨着边线),边线可以重合;<br/>
其他情况为上述标准的组合;<br/>
由于包含的情况太多,这里仅列举部分示例,示例如下:<br/>
<a href='#intersects1'>[1、区包含点]</a><br/>
<a href='#intersects2'>[2、多点包含点]</a><br/>
<a href='#intersects3'>[3、区包含线]</a><br/>
<a href='#intersects4'>[4、圆包含矩形]</a><br/>
<a href='#intersects5'>[5、几何包含 - 自定义坐标系]</a><br/></p>
</div>
<h4>参数</h4>
<div class="table-container">
<table class="params table">
<thead>
<tr>
<th>名称</th>
<th>类型</th>
<th style="min-width: 100px;">默认值</th>
<th class="last">描述</th>
</tr>
</thead>
<tbody>
<tr class="deep-level-0">
<td class="name" id="containerGeometry"><code>containerGeometry</code></td>
<td class="type">
<span class="param-type"><a class="mapgis-link-name" title="Geometry" Geometry.html>Geometry</a></span>
</td>
<td class="default">
null
</td>
<td class="description last"><p>包含几何对象</p></td>
</tr>
<tr class="deep-level-0">
<td class="name" id="insideGeometry"><code>insideGeometry</code></td>
<td class="type">
<span class="param-type"><a class="mapgis-link-name" title="Geometry" Geometry.html>Geometry</a></span>
</td>
<td class="default">
null
</td>
<td class="description last"><p>被包含的几何对象</p></td>
</tr>
</tbody>
</table>
</div>
<dl class="details">
</dl>
<div class='columns method-parameter'>
<div class="column is-2"><label>返回值</label></div>
<div class="column is-10">
<div class="columns">
<div class='param-desc column is-7'><p>是否包含</p></div>
<div class='column is-5 has-text-left'>
<label>类型: </label>
<span class="param-type">Boolean</span>
</div>
</div>
</div>
</div>
<h5>示例</h5>
<p class="code-caption"><h5 id='contains1'>区包含点</h5></p>
<pre class="prettyprint"><code>// ES5引入方式
const { Polygon, Point, GeometryEngine } = Zondy.Geometry
// ES6引入方式
import { GeometryEngine, Polygon, Point } from "@mapgis/webclient-common"
// 初始点几何,可以是任意几何
const point = new Point({
coordinates: [1, 1]
})
// 初始化区几何,可以是任意几何
const polygon = new Polygon({
coordinates: [
[
[1, 0],
[10, 0],
[10, 20],
[1, 20],
[1, 0]
]
]
})
// 判断区几何是否包含点几何对象
const isContains = GeometryEngine.contains(polygon, point)
console.log("区是否包含点:", isContains)</code></pre>
<p class="code-caption"><h5 id='contains2'>多点包含点</h5></p>
<pre class="prettyprint"><code>// ES5引入方式
const { MultiPoint, Point, GeometryEngine } = Zondy.Geometry
// ES6引入方式
import { MultiPoint, Point, GeometryEngine } from "@mapgis/webclient-common"
// 初始点几何
const point = new Point({
coordinates: [1, 1]
})
// 初始化多点几何
const multiPoint = new MultiPoint({
coordinates: [
[1, 1],
[1, 2]
]
})
// 判断多点几何是否包含点几何对象
const isContains = GeometryEngine.contains(multiPoint, point)
console.log("多点是否包含点:", isContains)</code></pre>
<p class="code-caption"><h5 id='contains3'>区包含线</h5></p>
<pre class="prettyprint"><code>// ES5引入方式
const { Polygon, LineString, GeometryEngine } = Zondy.Geometry
// ES6引入方式
import { Polygon, LineString, GeometryEngine } from "@mapgis/webclient-common"
// 初始化区几何
const polygon = new Polygon({
coordinates: [
[
[1, 0],
[10, 0],
[10, 20],
[1, 20],
[1, 0]
]
]
})
// 初始化线几何
const lineString = new LineString({
coordinates: [
[1, 0],
[1, 6]
]
})
// 判断多点几何是否包含点几何对象
const isContains = GeometryEngine.contains(polygon, lineString)
console.log("区是否包含线:", isContains)</code></pre>
<p class="code-caption"><h5 id='contains4'>圆包含矩形</h5></p>
<pre class="prettyprint"><code>// ES5引入方式
const { Circle, LineString, GeometryEngine } = Zondy.Geometry
// ES6引入方式
import { Circle, LineString, GeometryEngine } from "@mapgis/webclient-common"
// 初始化圆几何
const circle = new Circle({
center: [5, 5],
radius: 2
})
// 初始化矩几何
const extent = new Extent({
xmin: 2,
ymin: 2,
xmax: 4,
ymax: 4
})
// 判断多点几何是否包含点几何对象
const isContains = GeometryEngine.contains(circle, extent)
console.log("圆是否包含矩形:", isContains)</code></pre>
<p class="code-caption"><h5 id='contains5'>几何包含 - 自定义坐标系</h5></p>
<pre class="prettyprint"><code>// ES5引入方式
const { Polygon, LineString, SpatialReference, GeometryEngine } = Zondy.Geometry
// ES6引入方式
import { Polygon, LineString, SpatialReference, GeometryEngine } from "@mapgis/webclient-common"
// 初始化线几何对象
const line = new LineString({
coordinates: [
[60000, 3426025],
[598545, 3426025]
],
// 要设置坐标系
spatialReference: new SpatialReference({
wkid: 4547
})
})
// 初始化区几何对象
const polygon = new Polygon({
coordinates: [
[
[0, 3226025],
[698545, 3226025],
[698545, 3685076],
[0, 3685076],
[0, 3226025]
],
[
[100000, 3326025],
[598545, 3326025],
[598545, 3485076],
[100000, 3485076],
[100000, 3326025]
]
],
// 要设置坐标系
spatialReference: new SpatialReference({
wkid: 4547
})
})
// 判断多点几何是否包含点几何对象
const isContains = GeometryEngine.contains(circle, extent)
console.log("圆是否包含矩形:", isContains)</code></pre>
</div>
<div class="member">
<h4 class="name" id=".crosses">
<a class="href-link" href="#.crosses">#</a>
<span class='tag'>static</span>
<span class="code-name" id="crosses" style="font-size:30px">
crosses<span class="signature">(geometry1, geometry2)</span>
</span>
</h4>
<div class="description">
<p><a id='crosses'></a>
判断一个几何对象是否穿过另一个几何对象;<br/>
要穿过的几何类型为:线、多线,忽略三维高度;<br/>
被穿过的几何类型为:线、多线、矩形、圆、区以及多区,忽略三维高度,穿线和被穿过几何的坐标系必须相同;<br/>
要穿过的几何与被穿过的几何(geometry1和geometry2)可以调换输入,但其中一个geometry必须是LineString、MultiLineString中的一类;<br/>
当被穿过的几何类型为MultiLineString、MultiPolygon时,只要MultiLineString和MultiPolygon中有一个要素被穿过,就算穿过,返回true;<br/>
当要穿过的几何类型为MultiLineString时,只要MultiLineString中有一条线穿过geometry2(被穿过的几何体),就算穿过,返回true;<br/>
如果两条线出现重叠,此种情况不算穿过,返回false;<br/
如果两条线出现“入”型、“L”型,此种情况不算穿过,返回false;<br/>
线与圆相切的情况不算穿过,返回false;<br/>
线和多边形的一条边重叠,算穿过,返回true;<br/>
当polygon有内圈时,只要穿过外圈就算穿过,返回true;<br/>
示例如下:<br/>
<a href='#cross1'>[1、线穿过线]</a><br/>
<a href='#cross2'>[2、线穿过多线]</a><br/>
<a href='#cross3'>[3、线穿过区]</a><br/>
<a href='#cross4'>[4、多线穿过区]</a><br/>
<a href='#cross5'>[5、多线穿过多区]</a><br/></p>
</div>
<h4>参数</h4>
<div class="table-container">
<table class="params table">
<thead>
<tr>
<th>名称</th>
<th>类型</th>
<th class="last">描述</th>
</tr>
</thead>
<tbody>
<tr class="deep-level-0">
<td class="name" id="geometry1"><code>geometry1</code></td>
<td class="type">
<span class="param-type"><a class="mapgis-link-name" title="LineString" LineString.html>LineString</a></span>
|
<span class="param-type"><a class="mapgis-link-name" title="MultiLineString" MultiLineString.html>MultiLineString</a></span>
</td>
<td class="description last"><p>第一个几何体,支持线、多线;</p></td>
</tr>
<tr class="deep-level-0">
<td class="name" id="geometry2"><code>geometry2</code></td>
<td class="type">
<span class="param-type"><a class="mapgis-link-name" title="LineString" LineString.html>LineString</a></span>
|
<span class="param-type"><a class="mapgis-link-name" title="Polygon" Polygon.html>Polygon</a></span>
|
<span class="param-type"><a class="mapgis-link-name" title="MultiLineString" MultiLineString.html>MultiLineString</a></span>
|
<span class="param-type"><a class="mapgis-link-name" title="MultiPolygon" MultiPolygon.html>MultiPolygon</a></span>
|
<span class="param-type"><a class="mapgis-link-name" title="Circle" Circle.html>Circle</a></span>
|
<span class="param-type"><a class="mapgis-link-name" title="Extent" Extent.html>Extent</a></span>
</td>
<td class="description last"><p>第二个几何体,支持线、多线、面、多面、圆、矩形,两个参数可以调换输入,但其中一个geometry必须是LineString、MultiLineString中的一类;</p></td>
</tr>
</tbody>
</table>
</div>
<dl class="details">
</dl>
<div class='columns method-parameter'>
<div class="column is-2"><label>返回值</label></div>
<div class="column is-10">
<div class="columns">
<div class