Как построить полигоны с помощью Observable и turf.js? - PullRequest
0 голосов
/ 23 сентября 2019

Я нахожусь в процессе построения полигонов с координатами, поступающими из базы данных.Я подписался на Observable, чтобы получить все координаты (это массив).Я нажимаю каждый массив координат в верхнем массиве, чтобы иметь возможность строить свои полигоны:

this.customerApi.getLocations(this.currentUser.id)
    .subscribe((response) => {
      this.locations = response;
      this.polygonsArray.push(this.locations);
      this.locations.forEach(element 
      => {this.polygons.push(element.geoDefinition.features['0'].geometry.coordinates);
       });

getLocations возвращает 3 массива:

enter image description here

и я помещаю эти массивы в верхний, называемый this.polygons:

enter image description here

Моя проблема в том, что когда я звоню const varpolygon = turf.polygon(this.polygons);

Я получаю следующую ошибку:

 Uncaught (in promise): Error: Each LinearRing of a Polygon must have 4 or more Positions.
Error: Each LinearRing of a Polygon must have 4 or more Positions.

Я думаю, что моя структура массива в порядке, так как полигоны - это массив массивов координат.Тип это число [] [] [] как turf.polygon.

Структура моего проверено GEOJSON:

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [
              5.379856000000018,
              43.252967
            ],
            [
              5.422988000000032,
              43.249466
            ],
            [
              5.425048000000061,
              43.245153
            ],
            [
              5.383804000000055,
              43.239838
            ],
            [
              5.399856,
              43.212967
            ],
            [
              5.379856000000018,
              43.252967
            ]
          ]
        ]
      },
      "properties": {}
    },
    {
      "type": "Feature",
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [
              5.390139999999974,
              43.279295
            ],
            [
              5.393068999999969,
              43.279249
            ],
            [
              5.391814000000068,
              43.278421
            ],
            [
              5.390709000000015,
              43.278749
            ],
            [
              5.390899999999988,
              43.2785
            ],
            [
              5.390139999999974,
              43.279295
            ]
          ]
        ]
      },
      "properties": {}
    },
    {
      "type": "Feature",
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [
              -0.6070509999999558,
              44.840753
            ],
            [
              -0.5437080000000378,
              44.832962
            ],
            [
              -0.5222499999999854,
              44.820544
            ],
            [
              -0.5663670000000138,
              44.808853
            ],
            [
              -0.5863669999999956,
              44.788853
            ],
            [
              -0.6070509999999558,
              44.840753
            ]
          ]
        ]
      },
      "properties": {}
    }
  ]
}

Может кто-нибудь сказать мне, что я сделалне так, если это так и помочь мне?

Заранее благодарю за помощь.

1 Ответ

1 голос
/ 23 сентября 2019

this.polygons - это массив многоугольников, и, следовательно, он не является одним полигоном

for(var i;i<this.polygons.length;i++){
    polygon = turf.polygon(this.polygons[i]);
}

Таким образом, вы можете создавать отдельные полигоны для каждого полярности.

Или если выЧтобы создать один полигон для газонов, вам нужно создать мультиполигон для газонов

var turfpolygon = turf.multiPolygon(this.polygons);
...