这个问题是好久之前遇到的问题,在这里记录一下。当时的需求是这样的,用Arcgis做缓冲查询,但是客户要求是多条地铁线查询,曾经没有遇到过,百度查询无果,然后就只能去翻官方的文档,不过功夫不负有心人,还真的给我找到了就是geometryEngine这个下面的几个方法。不过官方明确说了,是从Since: ArcGIS API for JavaScript 4.0才开始有的,所以对于3.x我也就不知道了。
下面主要翻译一下官方提供的几个方法的用途(有点跑题,本问题用到的是union,是不是跟数据库的那个合并函数一样):
union(geometries)合并:所传的参数必须是同一个几何类型数组,返回值是一个Geometry。注意:数组必须都是面,都是线,并且是同一个参考系下面的。
buffer(geometry, distance, unit, unionResults)生成geometry一点缓存距离的几何图形:geometry可以是一个几何图形也可以是两个几何图形,distance缓冲距离(可以是一个值,也可以是与geometry对应的数组。传参geometries: [g1, g2, g3, g4],
distance: [d1]所有的集合缓存距离是d1;如果距离传的是
distances: [d1, d2, d3]
, g1
缓冲距离 d1
, g2
缓冲距离 d2
, g3
和g4
缓冲距离是d3
),unit缓冲距离的单位,unionResults是否将生成的几何图形合并(默认false),返回值是一个几何图形或者几何图形数组。(注意:GeometryEngine有两种方法用于在客户端缓冲几何图形:buffer和geodesicBuffer。在决定使用哪种方法时要谨慎。作为一般规则,如果输入几何图形具有WGS84 (wkid: 4326)或Web Mercator的空间引用,则使用geodesicBuffer。只有在试图使用投影坐标系(Web Mercator除外)缓冲几何图形时才使用缓冲区(此方法)。如果需要使用WGS84 (wkid: 4326)以外的地理坐标系统缓冲几何图形,请使用GeometryService.buffer()。)
clip(geometry, envelope)剪切:根据给定的范围去剪切几何图形(别人没用过,可能存翻译偏差,可以去官方文档看一下)。geometry给定的被剪切的几何图形,envelope给定的范围。返回值一个几何图形
contains(containerGeometry, insideGeometry)包含:一个geometry是否包含另一个geometry,containerGeometry:包含的(外面的)geometry,insideGeometry被包含的(里面的)geometry,返回值布尔类型
convexHull(geometry, merge)(没用过):计算输入几何的凸包。凸包是包含一组对象(如点)的最小凸多边形。输入几何图形可以是点、多点、折线或多边形。船体通常是一个多边形,但也可以是折线或点在退化的情况下(有道翻译的结果)。个人理解是:输入的一个或几个结合图形的最小外包几何多边形。第一个参数geometry或geometry数组,第二个是否合并输出geometry,返回值是一个geometry或者geometry数组
crosses(geometry1, geometry2)交叉(穿过):判断两个geometry是否有交叉,参数是两个geometry,geometry1去穿的geometry,geometry2被穿的,返回值boolean
cut(geometry, cutter)分割:将输入折线或多边形与切割折线相交的地方分割。对于折线,所有左切口在第一个几何图形中组合在一起。右切和重合切组合在第二个几何图形中,每个未定义的切,以及任何未切的部分,输出为单独的折线。对于多边形来说,所有的左切都分组在第一个多边形中,所有的右切都分组在第二个多边形中,每个未定义的切,以及切割后剩下的部分,都作为一个单独的多边形输出。如果没有返回削减,那么数组将是空的。只有在产生了左切口或右切口,并且在切割后还有剩余部分,或切割被限定在刀具的左右两侧时,才会产生未定义的切口。返回值geometry数组
distance(geometry1, geometry2, distanceUnit)距离:计算两个geometry之间的距离,距离的单位是distanceUnit,如果没有指定单位则用参考系的单位
difference(inputGeometry, subtractor)类似数学中的差集:参数subtractor的范围必须大于等于inputGeometry,几何图形subtractor减去inputGeometry就是返回值,返回值是一个geometry或者geometry数组
densify(geometry, maxSegmentLength, maxSegmentLengthUnit)有点像拟合的意思:将geometry现有顶点之间的点来致密几何图形,geometry被致密的几何图形,maxSegmentLength允许的最大段长度,必须是正数。maxSegmentLengthUnit单位
disjoint(geometry1, geometry2)不相交,输入的两个geometry不相交,返回值boolean
equals(geometry1, geometry2)相等,表示两个几何图形是否相等,返回值boolean
extendedSpatialReferenceInfo(spatialReference)返回一个对象,该对象包含有关输入空间引用的附加信息(没用过)
flipHorizontal(geometry, flipOrigin)绕点旋转,在水平轴上在一个点上随意翻转几何图形。flipOrigin被绕的点。默认为几何图形的形心。返回值geometry
flipVertical(geometry, flipOrigin)绕点旋转,在垂直轴上在一个点上随意翻转几何图形。flipOrigin被绕的点。默认为几何图形的形心。返回值geometry
generalize(geometry, maxDeviation, removeDegenerateParts, maxDeviationUnit)对光标中的几何图形执行泛化操作。点和多点几何图形保持不变。将包络线转换为多边形,然后推广(有道翻译,我没理解什么意思,也没用过)。geometry几何图形,maxDeviation广义几何与原始几何允许的最大偏差,removeDegenerateParts当为true,几何图形的退化部分将从输出中删除(可能对绘图不期望),maxDeviationUnit单位。返回值geometry
geodesicArea(geometry, unit)面积,与planarArea()不同,geodesicArea在执行此计算时考虑了地球的曲率。因此,当使用空间引用WGS84 (wkid: 4326)或Web Mercator的输入几何图形时,使用geodesicArea()计算面积是最佳实践。如果输入几何图形的投影坐标系不是Web Mercator,则使用planarArea()。
geodesicBuffer(geometry, distance, unit, unionResults)在输入几何图形周围指定的距离创建测地线缓冲多边形。在计算距离时,该方法考虑了地球的曲率,当处理非常大的几何图形和/或在全球尺度上空间变化的几何图形时,一个投影的坐标系统无法精确地绘制所有几何图形的坐标和测量距离,该方法可以提供非常精确的结果。这个方法只适用于WGS84 (wkid: 4326)和Web Mercator空间引用。通常,如果您的输入几何图形被分配了这两个空间引用中的一个,那么您应该始终使用geodesicBuffer()来为这些几何图形获得最精确的结果。如果需要缓冲分配给投射坐标系统而不是Web Mercator的点,则使用buffer()。如果输入几何图形的地理坐标系统不是WGS84 (wkid: 4326),则使用GeometryService.buffer()。
geodesicDensify(geometry, maxSegmentLength, maxSegmentLengthUnit)返回输入几何图形的地理密度版本。使用这个函数沿着大圆画几何图形的线。
geodesicLength(geometry, unit)计算输入几何图形的长度。与planarLength()不同,geodesicLength()在执行此计算时考虑了地球的曲率。因此,当使用空间引用WGS84 (wkid: 4326)或Web Mercator的输入几何图形时,使用geodesicLength()计算长度是最佳实践。如果输入几何图形的投影坐标系不是Web Mercator,则使用planarLength()。这个方法只适用于WGS84 (wkid: 4326)和Web Mercator空间引用。
intersect(geometry, intersector)交集,通过两个几何图形的交集创建一个新的几何图形。
intersects(geometry1, geometry2)相交,判断两个geometry是否相交
isSimple(geometry)给定的几何图形是否拓扑为空
nearestCoordinate(geometry, inputPoint)查找最接近指定点的几何图形的坐标。
nearestVertex(geometry, inputPoint)查找几何图形上最接近指定点的顶点。
nearestVertices(geometry, inputPoint, searchRadius, maxVertexCountToReturn)查找从指定点到给定距离内的所有顶点,从最近到最远排序,并以对象数组的形式返回它们。
offset(geometry, offsetDistance, offsetUnit, joinType, bevelRatio, flattenError)偏移操作创建一个几何图形,该几何图形与输入折线或多边形的平面距离恒定。它类似于缓冲,但只产生片面的结果。
overlaps(geometry1, geometry2)重叠,一个几何图形是否与另一个几何图形重叠。
planarArea(geometry, unit)计算输入几何图形的面积。与geodesicArea()相反,planarArea()使用投影坐标执行此计算,并且不考虑地球的曲率。当使用空间引用WGS84 (wkid: 4326)或Web Mercator的输入几何图形时,使用geodesicArea()计算面积是最佳实践。如果输入几何图形的投影坐标系不是Web Mercator,则使用planarArea()。
planarLength(geometry, unit)计算输入几何图形的长度。与geodesicLength()相反,planarLength()使用投影坐标,在执行此计算时不考虑地球的曲率。当使用空间引用WGS84 (wkid: 4326)或Web Mercator的输入几何图形时,使用geodesicLength()计算长度是最佳实践。如果输入几何图形的投影坐标系不是Web Mercator,则使用planarLength()
relate(geometry1, geometry2, relation)指示给定的DE-9IM关系是否适用于两个几何图形。
rotate(geometry, angle, rotationOrigin)按指定的度数逆时针旋转一个几何图形。旋转是围绕几何中心,或一个给定的旋转点。
simplify(geometry)对几何图形执行简化操作,改变给定的几何图形,使其定义相对于其几何类型在拓扑上合法。
symmetricDifference(leftGeometry, rightGeometry)创建两个几何图形的对称差异。对称差异包括在任何一个集合中的部分,但不包括在两个集合中的部分。
touches(geometry1, geometry2)相邻,一个几何图形是否与另一个几何图形相接触。
within(innerGeometry, outerGeometry)包含,一个几何图形是否在另一个几何图形中。
注意:上面提到的参考系就是Arcgis里面的spatialReference,我个人理解是参考系,希望不要给你们造成误解。geometryEngine有与之对应的异步geometryEngineAsync。上面解释很大一部分都是有道翻译的,只能提供借鉴,如需真是本意还是得到官网查阅(上文给出链接)。上面解释如有不正确的,不吝赐教,谢谢。