Создание объекта OpenLayers 5 MultiPolygon из MultiPolygon turf.js

В OpenLayers 5.3.0 я создал MultiPolygon, используя инструмент «difference» в turf.js. Когда я изучаю JSON, turf.js MultiPolygon выглядит нормально, но когда я пытаюсь использовать его для создания функции в OpenLayers, я получаю «Uncaught TypeError: t.addEventListener не является функцией».

Я пробовал много комбинаций JSON.stringify, JSON.parse, GeoJSON.readFeatures, .getCoordinates()... Я пытался добавить MultiPolygon turf.js в качестве функции напрямую через source.addFeature(multiPolygonGeometry), но затем я получаю «Uncaught TypeError: e .getId не является функцией». Я также попробовал source.addFeatures(multiPolygonGeometry) (обратите внимание на множественное число «addFeatures»), и это не дало мне никаких ошибок, но также ничего не добавило к источнику.

Соответствующие строки в моем коде следующие:

multiPolygonGeometry = turf.difference(largeArea,maskAreas);
multiPolygonFeature = new ol.Feature({
  geometry: multiPolygonGeometry,
  id: 'multiPolygonFeature1'
});

multiPolygonGeometry выглядит в консоли так:

{
  "type": "Feature",
  "properties": {},
  "geometry": {
    "type": "MultiPolygon",
    "coordinates": [
      [
        [
          [
            140.9716711384525,
            -36.97645228850101
          ],
          [
            140.97418321565786,
            -36.97679331852701
          ],
          [
            140.9741163253784,
            -36.97713531664132
          ],
          [
            140.9740304946899,
            -36.97903805606076
          ],
          [
            140.97437381744382,
            -36.98025509866784
          ],
          [
            140.97594864874696,
            -36.98127512642501
          ],
          [
            140.9714880598484,
            -36.9804459718428
          ],
          [
            140.9714500775476,
            -36.97642733756345
          ],
          [
            140.9716711384525,
            -36.97645228850101
          ]
        ]
      ],
      [
        [
          [
            140.97455248763328,
            -36.97684309230892
          ],
          [
            140.97751071844857,
            -36.97723786980259
          ],
          [
            140.97749308140382,
            -36.977304276099005
          ],
          [
            140.97715289421623,
            -36.97770848336402
          ],
          [
            140.97661807025068,
            -36.97969050789806
          ],
          [
            140.97628355026242,
            -36.97958658471583
          ],
          [
            140.97634792327878,
            -36.97900377288852
          ],
          [
            140.9764981269836,
            -36.97866094031662
          ],
          [
            140.97510337829587,
            -36.97727245260485
          ],
          [
            140.97455248763328,
            -36.97684309230892
          ]
        ]
      ],
      [
        [
          [
            140.97628420893903,
            -36.98092777726751
          ],
          [
            140.97617893060388,
            -36.98131793226549
          ],
          [
            140.97596635572492,
            -36.98127841787872
          ],
          [
            140.97628420893903,
            -36.98092777726751
          ]
        ]
      ]
    ]
  },
  "ol_lm": {
    "change": []
  }
}

И тут я получаю это сообщение:

events.js:174 Uncaught TypeError: t.addEventListener is not a function
    at v (events.js:174)
    at e.handleGeometryChanged_ (Feature.js:210)
    at e (events.js:41)
    at e.dispatchEvent (Target.js:101)
    at e.notify (Object.js:151)
    at e.set (Object.js:170)
    at e.setProperties (Object.js:186)
    at new e (Feature.js:108)
    at getPolygon (maskedPolygon.js:319) <-- this is the second line in my code sample above
    at <anonymous>:1:1

Что я здесь делаю неправильно? Я уверен, что это что-то простое, но я просто не могу взломать это.


person Gareth Jones    schedule 13.10.2019    source источник


Ответы (1)


Turf работает с функциями GeoJSON, поэтому ваша «multiPolygonGeometry» — это функция GeoJSON, которую можно проанализировать с помощью OpenLayers, а затем получить идентификатор:

multiPolygonFeature = new ol.format.GeoJSON().readFeature(multiPolygonGeometry);
multiPolygonFeature.setId('multiPolygonFeature1');
person Mike    schedule 13.10.2019
comment
Блестящий. Я был уверен, что уже пробовал это, но, видимо, нет - работает как шарм. Мне пришлось добавить multiPolygonFeature.getGeometry().transform('EPSG:4326','EPSG:3857');, чтобы разместить функцию там, где она должна была быть (а не в Гвинейском заливе), но вы решили для меня более сложную часть. Большое спасибо. - person Gareth Jones; 13.10.2019