скажите leaflet.draw, что многоугольник geojson представляет собой прямоугольник

Я использую leaflet.draw, и когда создается прямоугольник, я извлекаю данные прямоугольника с помощью layer.toGeoJSON(), а затем сохраняю их в БД с помощью ajax.

После этого, когда пользователь снова отображает карту, я загружаю ранее сохраненные данные и помещаю их в группу функций, зарезервированную для leaflet.draw, используя L.GeoJSON.geometryToLayer().

Проблема в том, что мой ранее созданный прямоугольник теперь является настоящим многоугольником для leaflet.draw.

«Прямоугольник» не существует в спецификациях geoJson, поэтому я могу это понять.

Теперь в «свойствах» геоджсона я знаю, что предыдущая форма была прямоугольником с атрибутом «тип».

Мой вопрос: есть ли способ заставить фигуру быть прямоугольником с точки зрения leaflet.draw?

Заранее спасибо !


person user1815190    schedule 14.11.2013    source источник
comment
Я делаю то же самое. Вы решили это? И еще вопрос: как вы включили информацию SRS в вывод GeoJSON?   -  person Jorge Arévalo    schedule 17.12.2013
comment
Я не решил проблему с банкоматом :(   -  person user1815190    schedule 20.01.2014
comment
Почему вы добавляете его в группу функций, зарезервированную для leaflet.draw? Почему бы просто не добавить его как оверлей geojson?   -  person sfletche    schedule 28.04.2014


Ответы (1)


Я столкнулся с этой же проблемой и нашел решение, которое работает для меня, хотя это не самый элегантный метод.

Используя leaflet.draw, я получаю новый слой, на котором я вызываю layer.toGeoJSON(), чтобы сохранить прямоугольник в моей базе данных. При обновлении страницы я извлекаю это представление GeoJSON из своей базы данных и сохраняю его с помощью:

var geojson = JSON.parse(geojson_string);

Сначала я попытался построить свой собственный Rectangle из точек и добавить его в нарисованные предметы.

var bounds = L.latLngBounds(geojson.geometry.coordinates);
var rect = L.rectangle(bounds);
drawnItems.addLayer(rect);

Этот код не выдавал ошибку, но и не отображал прямоугольник на карте. После дальнейшего исследования я обнаружил, что пары координат, выводимые из layer.toGeoJSON(), и пары координат, необходимые L.latLngBounds(), были перевернуты (т.е. одна была [широта, долгота], а другая была [длина, широта]), что вызвало Прямоугольник должен быть создан, но в совершенно неправильном месте. Чтобы обойти это, я сначала построил слой как слой GeoJSON, в результате чего получился многоугольник, а затем использовал границы этого представления для построения своего прямоугольника.

var geojson_layer  = L.GeoJSON.geometryToLayer(geojson);
var rect = L.rectangle(geojson_layer.getBounds());
drawnItems.addLayer(rect);

Это успешно создает прямоугольник, который leaflet.draw распознает и позволяет корректно работать инструментам редактирования.

person LWCoder    schedule 03.02.2015