Создание функции OpenLayers 5 MultiPolygon из turf.js MultiPolygon - PullRequest
0 голосов
/ 13 октября 2019

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

I 'Я пробовал много комбинаций JSON.stringify, JSON.parse, GeoJSON.readFeatures, .getCoordinates () ... Я пытался добавить Turf.js MultiPolygon как функцию напрямую через 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

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

1 Ответ

1 голос
/ 13 октября 2019

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

multiPolygonFeature = new ol.format.GeoJSON().readFeature(multiPolygonGeometry);
multiPolygonFeature.setId('multiPolygonFeature1');
...