Comment sauvegarder une notice de points de polygone remplie.dessiner à la table mysql

je voudrais utiliser dépliant.dessinez pour créer les contours des régions. J'ai réussi à obtenir que cela fonctionne bien: https://www.mapbox.com/mapbox.js/example/v1.0.0/leaflet-draw/

J'aimerais maintenant sauvegarder les données de chaque polygone dans une table mysql. Je suis un peu coincé sur la façon dont j'allais sur l'exportation de données et le format que je devrais faire.

si possible, j'aimerais reprendre les données dans une mapbox/tract map à l'avenir alors devinez quelque chose comme geojson serait bon.

19
demandé sur metasequoia 2014-06-03 19:06:29

7 réponses

Vous pouvez donc utiliser draw: créé pour capturer la couche, la convertir en geojson puis la stringifier pour la sauvegarder dans votre base de données. Je ne l'ai fait qu'une fois et c'était sale mais ça a marché.

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);
});
27
répondu Michael Evans 2014-06-03 15:29:25

Si vous souhaitez collecter les coordonnées, vous pouvez le faire de cette façon:

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;
};
5
répondu martynas 2014-08-01 15:00:11

@Michael Evans la méthode devrait fonctionner si vous voulez utiliser GeoJSON.

si vous voulez enregistrer des Points LatLngs pour chaque forme, vous pouvez faire quelque chose comme ceci:

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
}
1
répondu pk. 2014-08-11 18:46:04

N'oubliez pas le rayon du cercle

            if (layer instanceof L.Circle) {
                shapes.push([layer.getLatLng()],layer.getRadius())
            }

PS cette instruction peut ne pas obtenir le formatage approprié mais vous voyez le point. (Ou plutôt le rayon ainsi que le point ;-)

1
répondu bds 2015-08-24 05:48:26

Obtenir des actions en tant que tableau associatif + cercle de rayon

  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;
    };
1
répondu Naumche Ivanovski 2016-02-29 11:52:43
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);
});

// restore
L.geoJSON(JSON.parse(shape_for_db)).addTo(mymap);
1
répondu Lin Vic 2018-04-20 14:28:37

Pour moi, il a travaillé à ceci:

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);
});
0
répondu Robinson Chera 2017-08-30 07:25:39