Используйте точку wkt как круг с открытыми слоями

Я ищу способ рисовать круги в формате WKT, используя Openlayers. Я знаю, что стандарт WKT не поддерживает круги, но кто-то сказал, что вы можете использовать точку wkt, а затем установить для нее радиус (для Android, но может работать и для других вещей). Таким образом, мой вопрос заключается в том, как мне это сделать в Openlayers, если это возможно?

ссылка на то, что сказал Том https://stackoverflow.com/a/58430532

Вот как я сделал многоугольник

     let polyFeature = new ol.format.WKT().readFeature(polygonWKT, {
    // Must use both projections in order to draw the feature with the wkt format
    dataProjection   : "EPSG:4326",
    featureProjection: map.getView().getProjection() // Can at least get the standard projection and not have to fiddle with that
  });
  vectorSource.addFeature(polyFeature);

Я задаю этот вопрос, чтобы посмотреть, смогу ли я упростить рисование/сохранение координат. Прямо сейчас у меня есть координаты в строке «coord1, coord2;» и должны разделить их при использовании многоугольника, а затем преобразовать их обратно в этот строковый формат при сохранении координат. С помощью wkt я могу просто добавить строку в функцию Openlayers, и все готово, поэтому, если я смогу сделать то же самое с кругом, это будет здорово.

Что я использую Openlayers v6 (некоторая его версия) vanilla js, php


person Emirr    schedule 26.05.2021    source источник


Ответы (1)


Если вы всегда оборачиваете wkt в JSON

'{"wkt":"POINT(28.625360369528934 77.2227479486792)"}'

При желании вы можете добавить радиус, чтобы указать круг

'{"wkt":"POINT(28.625360369528934 77.2227479486792)","radius":50}'

Затем OpenLayers может проанализировать строку JSON и преобразовать точку с радиусом в окружность.

let json = JSON.parse(jsonString);
let polyFeature = new ol.format.WKT().readFeature(json.wkt, {
    dataProjection   : "EPSG:4326",
    featureProjection: map.getView().getProjection()
});
if (json.radius && polyFeature.getGeometry().getType() === 'Point') {
    polyFeature.setGeometry(new ol.geom.Circle(polyFeature.getGeometry().getCoordinates(), json.radius));
}
vectorSource.addFeature(polyFeature);
person Mike    schedule 26.05.2021
comment
Это решение отлично работает, за исключением того, что я только что изменил .getGeometry().getCoordinbates на .getGeometry().getExtent, потому что getCoordinbates у меня не сработал. Спасибо - person Emirr; 27.05.2021
comment
Это опечатка, должно быть getCoordinates() - person Mike; 27.05.2021