Как я могу добавить полигоны, извлеченные из MyQL

Я могу нарисовать многоугольник и сохранить его в базе данных MySQL. (если кому надо сейчас как, спрашивайте).

Я также могу отправить запрос SELECT в свою базу данных и показать сохраненные полигоны.

Вот что возвращает мне моя база данных

{
    "type":"FeatureCollection",
    "features":[
        {
            "id":1,
            "type":"Feature",
            "properties":{},
            "geometry":{
                "type":"Polygon",
                "coordinates":[
                    [
                        [6.146185398101807,46.447689601949826],
                        [6.146475076675416,46.44726084421887],
                        [6.1472368240356445,46.44776352535544],
                        [6.1466360092163095,46.447833752497885],
                        [6.146185398101807,46.447689601949826]
                    ]
                ]
            }
        },
        {
            "id":"id",
            "type":"Feature",
            "properties":{},
            "geometry":{
                "type":"Polygon",
                "coordinates":[
                    [
                        [6.146185398101807,46.447689601949826],
                        [6.146475076675416,46.44726084421887],
                        [6.1472368240356445,46.44776352535544],
                        [6.1466360092163095,46.447833752497885],
                        [6.146185398101807,46.447689601949826]
                    ]
                ]
            }
        }
    ]
}

Но как я могу добавить слой со своими полигонами на свою карту с возможностью редактирования или удаления, как если бы я рисовал новый полигон из моего Draw Control.

как это не событие, я не могу использовать это, верно?:

map.on(L.Draw.Event.CREATED, function (e) {
  var type = e.layerType,
    layer = e.layer;


  FGgpx.addLayer(layer);

  var shape = layer.toGeoJSON()
  var shape_for_db = JSON.stringify(shape);

  console.log("Create");
  console.log(shape_for_db);
  // Save to db

    saveGeofences(1,shape_for_db);
});

я пробовала безрезультатно! Но это как творение? Разве нет?

Вот код, который я использую для получения полигона из моей базы данных:

function getGeofences(devise_id){
  $.ajax({
    type: "POST",
    url: "maps/sql/getGeofences.php",
    //data: {data:data},
    data: {devise_id:devise_id},
    success: result,
    error: error,
    dataType: "json"
  });

  function error(data)
  {
    console.log("Error getGeofences");
    console.log(data);
  }

  function result(data){
    console.log("Geofences from DB");
    console.log(data);

    // How can I add a layer with the polygons to my map
    //FGgpx.addLayer(data); // This does not works

  }
}

person martin10    schedule 23.01.2017    source источник


Ответы (1)


var drawnItems = new L.FeatureGroup();

for (var i = 0; i < data.features.length; i++){
  var layer = L.GeoJson.geometryToLayer(data.features[i]);
  layer.addTo(drawnItems);
}

map.addLayer(drawnItems);

Цикл for перебирает объекты в вашем GeoJSON и преобразует их в слои, чтобы полигоны можно было отобразить на карте. Каждый объект добавляется в группу объектов DrawItems, что позволяет группировать слои и обрабатывать их как одно целое, поэтому их можно добавлять на карту вместе. Таким образом, состояние карты может быть установлено в состояние, когда полигоны были нарисованы перед их сохранением в базе данных.

Надеюсь, это поможет, Чаба

person SabaS    schedule 03.02.2017
comment
Небольшое объяснение всегда приветствуется - объясните, как работает опубликованный вами код и где ОП может его использовать. - person Tom; 03.02.2017