Summary
Methods:
addPolygon |
追加一个面状几何对象到当前几何对象中。 |
applyTransform |
给定一个函数,用来修改几何对象的坐标值。该方法可能改变原几何对象的坐标值,如果需要保留原几何对象,可以使用clone方法复制为副本。 |
atApproximatePoint |
检测一个坐标是否在几何对象的边界范围以内。 本计算基于边界盒与坐标的相交运算,不包含高程方向的运算,一般用于近似相交判断。注意:与边界盒相交的坐标不一定在几何对象内,可能会在几何对象的边缘以外附近。 |
clone |
复制一个多面。 |
destroy |
销毁对象。 |
distanceTo |
计算两个地理几何对象之间的距离(X-Y平面内)。 |
getArea |
计算多面几何对象的面积。计算结果为每个面状几何对象的面积的累加值。 |
getBBox |
计算多面几何对象的三维包围盒。 |
getBuffer |
计算多面的缓冲区,缓冲区限于X-Y平面(Z值为0)内。 |
getCentroid |
计算多面的质心。 |
getClosestPoint |
(暂未启用)从构成多面几何对象的所有点中,获取离传入坐标最近的一个点。 |
getCoordSeqs |
提取多面中每个面的坐标序列数组,返回值为每个面构成的二维数组。从起始索引开始提取,取到结束索引的前一位,即按“前闭后开”的原则进行提取坐标序列。 |
getExtent |
计算多面几何对象的地理范围。该地理范围界定了X-Y平面的边界,不含高程信息。 |
getMaxDistPoint |
从构成多面几何对象的所有点中,获取离传入坐标最远的一个点。 |
getPerimeter |
计算周长。如果polygonIndex和linearRingIndex都未设置,则返回所有多边形中所有线环的长度和;如果参数linearRingIndex未设置, |
getPolygon |
获取指定索引处的面状几何对象。 |
getPolygonCount |
返回多面几何对象的所有几何对象的数量。 |
getPolygons |
获取所有面状几何对象。 |
getType |
获取几何对象类型。 |
intersectsExtent |
检测几何对象与地理范围是否相交。 |
intersectsGeometry |
检测与另一个几何对象是否相交。 |
isSelfIntersects |
自相交判断。 |
moveByDelta |
沿坐标轴正方向,将几何对象的所有坐标按给定的参数偏移。如果参数为负,则向坐标轴负向偏移。该方法可能改变原几何对象的位置,如果需要保留原几何对象,需要事先使用clone方法复制为副本。 |
rotate |
以某个坐标为中心,绕坐标轴旋转。绕轴旋转的本质如下: 绕Z轴旋转即是在XY平面内旋转;绕X轴旋转即是在YZ平面内旋转;绕Y轴旋转即是在XZ平面内旋转 |
scale |
按各坐标轴的缩放比例和指定的缩放原点进行缩放几何对象。该方法可能改变原几何对象的坐标值,如果需要保留原几何对象,需要事先使用clone方法复制为副本。 |
simplify |
简化多面几何对象。在尽可能不改变原几何对象形状的情况下,减少构成几何对象的坐标数量。采用道格拉斯-普克算法,简化后,构成多面几何对象的每个面的每条线环中应至少包含三个点。 |
transform |
将一个多面几何对象中点所对应的地理坐标从源坐标系转换到目标坐标系。该方法可能改变原几何对象的坐标值,如果需要保留原几何对象,需要事先使用clone方法复制为副本。 |
Constructor
new MultiPolygon(polygons)
构造一个多面几何对象。
Parameters:
Name | Type | Description |
---|---|---|
polygons |
Array.<module:geom~Polygon> | 面状几何对象数组。 |
Example
let coord1 = new hmap.basetype.Coordinate(120,30,0);
let coord2 = new hmap.basetype.Coordinate(120,30,0);
let coord3 = new hmap.basetype.Coordinate(120,30,0);
let coord4 = new hmap.basetype.Coordinate(120,30,0);
let p1 = new hmap.geom.Point(coord1);
let p2 = new hmap.geom.Point(coord2);
let p3 = new hmap.geom.Point(coord3);
let p4 = new hmap.geom.Point(coord4);
let linearRing = new hmap.geom.LinearRing([p1,p2,p3,p4]);
let polygon1 = new hmap.geom.Polygon([linearRing]);
let polygon2 = polygon1.clone();
let multiPolygon = new hmap.geom.MultiPolygon([polygon1,polygon2]);
Methods
-
addPolygon(polygon)
-
追加一个面状几何对象到当前几何对象中。
Parameters:
Name Type Description polygon
module:geom~Polygon 面状几何对象
Example
multiPolygon.addPolygon(polygon3);
-
applyTransform(callback)
-
给定一个函数,用来修改几何对象的坐标值。该方法可能改变原几何对象的坐标值,如果需要保留原几何对象,可以使用clone方法复制为副本。
Parameters:
Name Type Description callback
function 用于处理坐标值的回调函数,回调函数的参数为坐标对象,该回调函数会作用在几何对象的每个坐标上。
-
atApproximatePoint(coord) → {Boolean}
-
检测一个坐标是否在几何对象的边界范围以内。 本计算基于边界盒与坐标的相交运算,不包含高程方向的运算,一般用于近似相交判断。注意:与边界盒相交的坐标不一定在几何对象内,可能会在几何对象的边缘以外附近。
边界盒:即几何对象的地理范围构成的多边形区域。Parameters:
Name Type Description coord
module:basetype~Coordinate 地理坐标
Returns:
Boolean -返回true表示在几何对象的边界盒范围以内;返回false表示不在几何对象的边界盒范围以内
-
clone() → {module:geom~MultiPolygon}
-
复制一个多面。
-
destroy()
-
销毁对象。
Example
multiPolygon.destroy();
-
distanceTo(geometry, options) → {Number|Object}
-
计算两个地理几何对象之间的距离(X-Y平面内)。
Parameters:
Name Type Description geometry
module:geom~Geometry 地理几何对象,继承module:geom~Geometry的任意几何对象
options
Object 距离计算时的可选配置项
Name Type Description details
Boolean 指定返回结果的格式,默认为false
若为true,则返回一个对象:{"distance":xxx,"x0":xxx,"y0":xxx,"x1":xxx,"y1":xxx}。其中 distance 表示几何对象到目标几何对象的距离;x0 和 y0 属性表示当前几何对象上最靠近目标几何对象的坐标;x1 和 y1 表示目标几何上最靠近当前几何对象的坐标。
但当edge为false且两个几何对象相交,则计算距离的详细交点信息的:x0,y0,x1,y1 无参考意义!
若为false,则返回几何对象到目标几何对象的距离值,距离的单位跟当前地图的坐标系使用的长度单位保持一致。edge
Boolean 是否计算一个几何图形到目标几何图形边缘的最近距离,默认为true。 如果为true, 一个几何图形完全包含在目标几何图形中时,计算距离为负数;如果为false,两个几何图形相交情况下 计算距离为0
Returns:
Number | Object -两个几何之间的距离。details为true 返回Object 否则返回 Number
-
getArea() → {Number}
-
计算多面几何对象的面积。计算结果为每个面状几何对象的面积的累加值。
Returns:
Number -面积,单位是地图单位的平方
Example
let result = multiPolygon.getArea();
-
getBBox() → {module:basetype~BBox}
-
计算多面几何对象的三维包围盒。
-
getBuffer(dist, sideType) → {module:geom~Polygon|module:geom~MultiPolygon}
-
计算多面的缓冲区,缓冲区限于X-Y平面(Z值为0)内。
Parameters:
Name Type Default Description dist
Number 缓冲距离,地图单位,且是大于0的数字,可以通过地图对象上的getDegreePerMeter和getMeterPerDegree方法,对地图单位进行度和米的转换。注意,缓冲半径过大可能出现重叠或岛洞
sideType
String FULL 面缓冲类型,"FULL":包含原几何对象,"OUTSIDE":不包含原有几何对象
-
getCentroid() → {module:basetype~Coordinate}
-
计算多面的质心。
Example
let result = multiPolygon.getCentroid();
-
getClosestPoint(coord) → {module:geom~Point}
-
(暂未启用)从构成多面几何对象的所有点中,获取离传入坐标最近的一个点。
Parameters:
Name Type Description coord
module:basetype~Coordinate 一个地理坐标
-
getCoordSeqs(startIndex, endIndex) → {Array.<Array.<module:basetype~CoordSeq>>}
-
提取多面中每个面的坐标序列数组,返回值为每个面构成的二维数组。从起始索引开始提取,取到结束索引的前一位,即按“前闭后开”的原则进行提取坐标序列。
1.当startIndex小于0时则取0,当endIndex大于坐标序列长度时取坐标序列长度;
2.当endIndex未传入时,返回startIndex以后的Arraymodule:basetype~CoordSeq;
3.如果startIndex与endIndex参数为空,返回所有Arraymodule:basetype~CoordSeq。
4.当startIndex大于等于endIndex,返回空数组。Parameters:
Name Type Default Description startIndex
0 起始索引。如果不传,默认是0。
endIndex
结束索引。如果不传,默认是坐标序列数组长度值。
Example
let result = multiPolygon.getCoordSeqs();
-
getExtent() → {module:basetype~Extent}
-
计算多面几何对象的地理范围。该地理范围界定了X-Y平面的边界,不含高程信息。
-
getMaxDistPoint(coord) → {module:geom~Point}
-
从构成多面几何对象的所有点中,获取离传入坐标最远的一个点。
Parameters:
Name Type Description coord
module:basetype~Coordinate 一个地理坐标
-
getPerimeter(polygonIndex, linearRingIndex, srid) → {Number}
-
计算周长。如果polygonIndex和linearRingIndex都未设置,则返回所有多边形中所有线环的长度和;如果参数linearRingIndex未设置,
则返回指定多边形中所有线环的长度和;如果polygonIndex未设置,返回每个多边形中指定线环的长度和。Parameters:
Name Type Default Description polygonIndex
Number 面几何对象索引
linearRingIndex
Number 线环索引
srid
String 4326 坐标系id,支持4326和3857
Throws:
polygonIndex和linearRingIndex不是数字,或者超出索引范围时,抛出异常
Returns:
Number -返回指定多边形中的指定线环的长度
-
getPolygon(index>) → {module:geom~Polygon}
-
获取指定索引处的面状几何对象。
Parameters:
Name Type Default Description index>
Number 0 面状几何对象在多面几何对象中的索引。如果索引超出MultiPolygon中的面的个数,则返回undefined
-
getPolygonCount() → {Number}
-
返回多面几何对象的所有几何对象的数量。
Returns:
Number -所有几何对象的数量
-
getPolygons() → {Array.<module:geom~Polygon>}
-
获取所有面状几何对象。
-
getType() → {String}
-
获取几何对象类型。
Returns:
String -返回几何对象类型
-
intersectsExtent(extent) → {Boolean}
-
检测几何对象与地理范围是否相交。
Parameters:
Name Type Description extent
module:basetype~Extent 地理范围
Returns:
Boolean -为true时表示相交,为false时表示不相交
-
intersectsGeometry(geom) → {Boolean}
-
检测与另一个几何对象是否相交。
Parameters:
Name Type Description geom
module:geom~Geometry 另一个几何对象
Returns:
Boolean -返回true表示相交;返回false表示不相交
-
isSelfIntersects() → {Boolean}
-
自相交判断。
Returns:
Boolean -true表示自相交,false表示不自相交
-
moveByDelta(deltaX, deltaY, deltaZ) → {module:geom~MultiPolygon}
-
沿坐标轴正方向,将几何对象的所有坐标按给定的参数偏移。如果参数为负,则向坐标轴负向偏移。该方法可能改变原几何对象的位置,如果需要保留原几何对象,需要事先使用clone方法复制为副本。
Parameters:
Name Type Default Description deltaX
Number 0 X坐标轴方向的平移量
deltaY
Number 0 Y坐标轴方向的平移量
deltaZ
Number 0 Z坐标轴方向的平移量
-
rotate(axis, angle, center)
-
以某个坐标为中心,绕坐标轴旋转。绕轴旋转的本质如下: 绕Z轴旋转即是在XY平面内旋转;绕X轴旋转即是在YZ平面内旋转;绕Y轴旋转即是在XZ平面内旋转
Parameters:
Name Type Description axis
String 坐标轴。可选值为"X","Y","Z"
angle
Number 旋转的角度,超过360度时,取angle/360的余数。逆时针为正,顺时针为负
center
module:basetype~Coordinate 旋转轴所穿过的点,可选项。该参数为空时,绕坐标轴旋转
-
scale(xFactor, yFactor, zFactor, origin) → {module:geom~MultiPolygon}
-
按各坐标轴的缩放比例和指定的缩放原点进行缩放几何对象。该方法可能改变原几何对象的坐标值,如果需要保留原几何对象,需要事先使用clone方法复制为副本。
Parameters:
Name Type Description xFactor
Number X坐标值缩放比例,必须大于0
yFactor
Number Y坐标值缩放比例,必须大于0
zFactor
Number Z坐标值缩放比例,必须大于0
origin
module:basetype~Coordinate 缩放原点,以该点为参考点进行缩放。默认以几何对象地理范围的中心点进行缩放
Throws:
-
RangeError -
当xFactor, yFactor, zFactor的值不为正时
-
TypeError -
origin类型错误时
-
-
simplify(tolerance) → {module:geom~MultiPolygon}
-
简化多面几何对象。在尽可能不改变原几何对象形状的情况下,减少构成几何对象的坐标数量。采用道格拉斯-普克算法,简化后,构成多面几何对象的每个面的每条线环中应至少包含三个点。
Parameters:
Name Type Description tolerance
Number 容差值,大于等于0,单位和地图单位一致,可以通过地图对象上的getDegreePerMeter和getMeterPerDegree方法,对地图单位进行度和米的转换。容差值越大,构成几何对象的坐标数量越少。
-
transform(source) → {module:geom~MultiPolygon}
-
将一个多面几何对象中点所对应的地理坐标从源坐标系转换到目标坐标系。该方法可能改变原几何对象的坐标值,如果需要保留原几何对象,需要事先使用clone方法复制为副本。
Parameters:
Name Type Description source
Number 源坐标系,考虑到实际转换时,数据量可能较大,故传入CRS的SRID,而非CRS实例,以减少CRS实例数量,进而降低内存成本
Example
... let multiPolygon = new hmap.geom.MultiPolygon(polygons); multiPolygon.transform(3857, 4326);