如何从小叶多边形

时间:2017-08-29 06:26:16

标签: javascript php mysql leaflet

我使用Leaflet绘制绘制多边形。我成功地做到了这一点,但是当我点击编辑时,我可以编辑多边形,但它并没有将坐标转换为HTML,坐标" field..how我可以这样做吗?是搞砸了吗?谢谢!我将坐标保存为MYSQL数据库为VARCHAR。谢谢!

$(".edit_zona").click(function(){
            var id_zona = $(this).attr("id").substring(10);
            //alert(id_zona);
            $.ajax({
                type: "POST",
                url: "ajax/edit_zona.php",
                data:{
                id: id_zona
                },
                   cache:false,
                   dataType: "html"

            }).done(function(ms){
                $("#response").html(ms);
               var osmUrl = 'https://api.mapbox.com/styles/v1/mapbox/streets-v10/tiles/{z}/{x}/{y}?access_token=pk.eyJ1IjoibWVnYTYzODIiLCJhIjoiY2ozbXpsZHgxMDAzNjJxbndweDQ4am5mZyJ9.uHEjtQhnIuva7f6pAfrdTw',
            osmAttrib = '&copy; <a href="http://openstreetmap.org/copyright">OpenStreetMap</a> contributors',
            osm = L.tileLayer(osmUrl, { maxZoom: 18, attribution: osmAttrib }),
            map = new L.Map('map', { center: new L.LatLng(44.9323281,26.0306833), zoom: 12.25 }),
            drawnItems = L.featureGroup().addTo(map);
    L.control.layers({
        'osm': osm.addTo(map)
    },).addTo(map);

      function stringToGeoPoints( geo ) {
   var linesPin = geo.split(",");

   var linesLat = new Array();
   var linesLng = new Array();

   for(i=0; i < linesPin.length; i++) {
    if(i % 2) {
     linesLng.push(linesPin[i]);
    }else{
     linesLat.push(linesPin[i]);
    }
   }

   var latLngLine = new Array();

   for(i=0; i<linesLng.length;i++) {
    latLngLine.push( L.latLng( linesLat[i], linesLng[i]));
   }

   return latLngLine;
  }
    var zona = JSON.parse('<?php echo json_encode($arr) ?>');
     for(var i=0; i < zona.length; i++) {
       //console.log(zona[i]['geolocatii']);
    var polygon = L.polygon( stringToGeoPoints(zona[i]['geolocatii']), { color: 'red'}).addTo(map); 
    polygon.editing.enable();
   }
   map.addControl(new L.Control.Draw({
     draw : {
        position : 'topleft',
        polygon : true,
        polyline : false,
        rectangle : false,
        circle : false,
        marker: false,
        circlemarker: false
    },
    edit : {
        featureGroup: drawnItems
    }

    }));
   var featureGroup = L.featureGroup().addTo(map);
     function drawArea() {
          var polygon;
          var draggableAreaMarkers = new Array();
   if(polygon != null) {
    map.removeLayer( polygon );
   }

   var latLngAreas = new Array();

   for(i=0; i<draggableAreaMarkers.length; i++) {
    if(draggableAreaMarkers[i] != "") {
     latLngAreas.push( L.latLng( draggableAreaMarkers[ i ].getLatLng().lat, draggableAreaMarkers[ i ].getLatLng().lng));
    }
   }

   if(latLngAreas.length > 1) {
    // create a blue polygon from an array of LatLng points
    polygon = L.polygon( latLngAreas, { color: 'blue' }).addTo(map);
   }

   if(polygon != null) {
    // zoom the map to the polygon
    map.fitBounds( polygon.getBounds() );
   }
  }
 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 points = e.layer.getLatLngs();
  var puncte = JSON.stringify(points);
 // console.log(puncte);

    });
map.on(L.Draw.Event.CREATED, function (e) {
    map.addLayer(e.layer);
    var points = e.layer.getLatLngs();
    puncte1=points.join(',');
  puncte1=puncte1.toString();
  puncte1=points.join(',').match(/([\d\.]+)/g).join(',')
  //console.log(puncte1);
$('#geo').val(puncte1);
 //console.log(puncte1);

});

    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;

    };
    var arr = JSON.parse( '<?php echo json_encode($arr) ?>' );
    console.log(arr);
            });
        });

我可以从数据库中获取旧坐标,但是当我编辑它时,它并没有改变,geolocatii&#34;领域   geolocation field problem

1 个答案:

答案 0 :(得分:0)

也许BBox工具将对您有所帮助:

http://bboxfinder.com/#0.000000,0.000000,0.000000,0.000000

https://github.com/aaronr/bboxfinder.com

该工具基于传单绘制插件,并配有坐标网格。绘制框后,即可在URl路径中获得坐标。enter image description here