Как сохранить завершенные точки polygon sheetlet.draw в таблицу mysql
Я хотел бы использовать sheetlet.draw для создания контуров регионов. Мне удалось заставить эту работу нормально: https://www.mapbox.com/mapbox.js/example/v1.0.0/leaflet-draw/
Теперь я хотел бы сохранить данные для каждого многоугольника в таблице mysql. Я немного зациклился на том, как я буду экспортировать данные и формат, в котором я должен это делать.
Если возможно, я хотел бы вернуть данные обратно в карточку mapbox/leaflet в будущем, так что угадайте, что-то вроде geojson будет хорошо.
Ответы
Ответ 1
Итак, вы можете использовать draw: created, чтобы захватить слой, преобразовать его в geojson, а затем подстроить его для сохранения в вашей базе данных. Я только сделал это один раз, и он был грязным, но работал.
map.on('draw:created', function (e) {
var type = e.layerType;
var layer = e.layer;
var shape = layer.toGeoJSON()
var shape_for_db = JSON.stringify(shape);
});
Ответ 2
Если вы хотите собрать координаты, вы можете сделать это следующим образом:
var drawnItems = new L.FeatureGroup();
map.addLayer(drawnItems);
map.on('draw:created', function (e) {
var type = e.layerType,
layer = e.layer;
drawnItems.addLayer(layer);
var shapes = getShapes(drawnItems);
// Process them any way you want and save to DB
...
});
var getShapes = function(drawnItems) {
var shapes = [];
drawnItems.eachLayer(function(layer) {
// Note: Rectangle extends Polygon. Polygon extends Polyline.
// Therefore, all of them are instances of Polyline
if (layer instanceof L.Polyline) {
shapes.push(layer.getLatLngs())
}
if (layer instanceof L.Circle) {
shapes.push([layer.getLatLng()])
}
if (layer instanceof L.Marker) {
shapes.push([layer.getLatLng()]);
}
});
return shapes;
};
Ответ 3
Метод @Michael Evans должен работать, если вы хотите использовать GeoJSON.
Если вы хотите сохранить очки LatLngs для каждой фигуры, вы можете сделать что-то вроде этого:
map.on('draw:created', function (e) {
var type = e.layerType;
var layer = e.layer;
var latLngs;
if (type === 'circle') {
latLngs = layer.getLatLng();
}
else
latLngs = layer.getLatLngs(); // Returns an array of the points in the path.
// process latLngs as you see fit and then save
}
Ответ 4
Не забывайте, что радиус круга
if (layer instanceof L.Circle) {
shapes.push([layer.getLatLng()],layer.getRadius())
}
PS этот оператор может не получить правильное форматирование, но вы видите точку. (Вернее, радиус, а также точка; -)
Ответ 5
Получить общие ресурсы как ассоциативный массив + радиус окружности
map.on('draw:created', function (e) {
var type = e.layerType,
layer = e.layer;
if (type === 'marker') {
layer.bindPopup('Call Point!');
}
drawnItems.addLayer(layer);
var shapes = getShapes(drawnItems);
console.log("shapes",shapes);
});
var getShapes = function (drawnItems) {
var shapes = [];
shapes["polyline"] = [];
shapes["circle"] = [];
shapes["marker"] = [];
drawnItems.eachLayer(function (layer) {
// Note: Rectangle extends Polygon. Polygon extends Polyline.
// Therefore, all of them are instances of Polyline
if (layer instanceof L.Polyline) {
shapes["polyline"].push(layer.getLatLngs())
}
if (layer instanceof L.Circle) {
shapes["circle"].push([layer.getLatLng()])
}
if (layer instanceof L.Marker) {
shapes["marker"].push([layer.getLatLng()],layer.getRadius());
}
});
return shapes;
};
Ответ 6
Для меня это сработало:
map.on(L.Draw.Event.CREATED, function (e) {
map.addLayer(e.layer);
var points = e.layer.getLatLngs();
puncte1=points.join(',');
puncte1=puncte1.toString();
//puncte1 = puncte1.replace(/[{}]/g, '');
puncte1=points.join(',').match(/([\d\.]+)/g).join(',')
//this is the field where u want to add the coordinates
$('#geo').val(puncte1);
});