Geo.MultiPolygon(polygons: GeoPolygon[]): GeoMultiPolygon

支持端:小程序 2.6.3, 云函数

构造一个地理位置 ”多边形“ 集合。一个多边形集合由多个多边形组成。

参数

polygons: GeoPolygon[]

“多边形” 数组

返回值

GeoMultiPolygon

索引

如存储地理位置信息的字段有被查询的需求,务必对字段建立地理位置索引

说明

多边形集合由多个多边形组成。一个多边形由一个或多个线性环(Linear Ring)组成,一个线性环即一个闭合的线段。一个闭合线段至少由四个点组成,其中最后一个点和第一个点的坐标必须相同,以此表示环的起点和终点。如果一个多边形由多个线性环组成,则第一个线性环表示外环(外边界),接下来的所有线性环表示内环(即外环中的洞,不计在此多边形中的区域)。如果一个多边形只有一个线性环组成,则这个环就是外环。

多边形构造规则:

  1. 第一个线性环必须是外环
  2. 外环不能自交
  3. 所有内环必须完全在外环内
  4. 各个内环间不能相交或重叠,也不能有共同的边
  5. 外环应为逆时针,内环应为顺时针

示例代码

示例代码

  1. const { MultiPolygon, Polygon, LineString, Point } = db.Geo
  2. db.collection('todos').add({
  3. data: {
  4. description: 'eat an apple',
  5. location: MultiPolygon([
  6. Polygon([
  7. LineString([ Point(50, 50), Point(60, 80), Point(80, 60), Point(50, 50) ]),
  8. ]),
  9. Polygon([
  10. LineString([ Point(0, 0), Point(30, 20), Point(20, 30), Point(0, 0) ]),
  11. LineString([ Point(10, 10), Point(16, 14), Point(14, 16), Point(10, 10) ])
  12. ]),
  13. ])
  14. }
  15. }).then(console.log).catch(console.error)

除了使用接口构造一个 MultiPolygon 外,也可以使用等价的 GeoJSON多边形 (MultiPolygon) 的 JSON 表示,其格式如下:

  1. {
  2. "type": "MultiPolygon",
  3. "coordinates": [
  4. // polygon 1
  5. [
  6. [ [lng, lat], [lng, lat], [lng, lat], ..., [lng, lat] ],
  7. [ [lng, lat], [lng, lat], [lng, lat], ..., [lng, lat] ],
  8. ...
  9. [ [lng, lat], [lng, lat], [lng, lat], ..., [lng, lat] ]
  10. ],
  11. ...
  12. // polygon n
  13. [
  14. [ [lng, lat], [lng, lat], [lng, lat], ..., [lng, lat] ],
  15. [ [lng, lat], [lng, lat], [lng, lat], ..., [lng, lat] ],
  16. ...
  17. [ [lng, lat], [lng, lat], [lng, lat], ..., [lng, lat] ]
  18. ],
  19. ]
  20. }

示例代码

  1. db.collection('todos').add({
  2. data: {
  3. description: 'eat an apple',
  4. location: {
  5. type: 'MultiPolygon',
  6. coordinates: [
  7. [
  8. [ [50, 50], [60, 80], [80, 60], [50, 50] ]
  9. ],
  10. [
  11. [ [0, 0], [30, 20], [20, 30], [0, 0] ],
  12. [ [10, 10], [16, 14], [14, 16], [10, 10]]
  13. ]
  14. ]
  15. }
  16. }
  17. }).then(console.log).catch(console.error)