2016-02-11 103 views
0

我想知道如何给(并检索)一个ID到小册子(.draw)中的多边形。我需要这个,因为我想能够告诉数据库哪个多边形要删除/编辑。识别要删除的多边形

在此先感谢

编辑:

在我的数据库我节省了polygon_ID和多边形的坐标。这是我救一个多边形的代码:(当我完成绘制多边形这trigered)

map.on('draw:created', function(e) { 
 
    var type = e.layerType, 
 
    layer = e.layer; 
 

 
    if (type == "polygon") { 
 

 
    var polygon = {}; 
 
    polygon['geometry'] = {}; 
 
    polygon['geometry']['type'] = "Polygon"; 
 

 
    var coordinates = []; 
 
    latlngs = layer.getLatLngs(); 
 
    for (var i = 0; i < latlngs.length; i++) { 
 

 
     coordinates.push([latlngs[i].lat, latlngs[i].lng]) 
 

 
    } 
 

 
    polygon['geometry']['coordinates'] = [coordinates]; 
 

 
    coordinates = JSON.stringify(coordinates); 
 

 
    //console.log(coordinates); 
 

 
    var xhttp = new XMLHttpRequest(); 
 
    xhttp.onreadystatechange = function() { 
 
     if (xhttp.readyState == 4 && xhttp.status == 200) { 
 
     //alert("Sent!"); 
 
     } 
 
    }; 
 
    xhttp.open("POST", "inc/send.php?a=add&t=polygon&c=" + coordinates, true); 
 
    xhttp.send(); 
 

 
    } 
 

 
    drawnItems.addLayer(layer); 
 

 
});

这是我send.php:

if(isset($_GET['c']) && isset($_GET['t']) && isset($_GET['a'])){ 
 

 
    $coordinates = $_GET['c']; 
 
    $type \t \t = $_GET['t']; 
 
    $action \t \t = $_GET['a']; 
 

 
    if($type == "polygon" && $action == "add"){ 
 

 
    $sth = $dbh->prepare('INSERT INTO polygons (coordinates) VALUES (:coordinates)'); 
 
    $sth->bindParam(':coordinates', $coordinates); 
 
    $sth->execute(); 
 

 
    } 
 

 
} else { 
 

 

 

 
}

这是我如何加载我的多边形:

$polygonsth = $dbh->prepare("SELECT * FROM polygons"); 
 
$polygonsth->execute(); 
 
$polygonresult = $polygonsth->fetchAll(); 
 

 
... 
 

 
foreach ($polygonresult as $row) { 
 
\t 
 
echo "L.polygon(" . $row['coordinates'] . ") 
 
\t .addTo(drawnItems); 
 
\t //console.log(pol.options.id); 
 
"; 
 

 
}

我真的希望这个澄清的事情。

+1

取决于您存储多边形的格式,我们无法从您的非常简短的问题中解决问题。请阅读此:http://stackoverflow.com/help/how-to-ask – iH8

+0

我很抱歉不够清楚。在我的数据库中,我存储了多边形手柄的所有经度和纬度位置,并且每个多边形都有ID。我的问题是如何将传单和mysql ID链接在一起,以便我可以告诉数据库要删除的多边形。我使用AJAX来执行查询。也许你现在可以帮助我? –

+0

仍然取决于如何初始化多边形以及将它们添加到地图的方式。您能否编辑您的问题并在您的评论中添加您输入的信息,并在您如何将多边形添加到地图中时包含相关的代码?单独的多边形? FeatureLayer? GeoJSON的?太多的变量给出了很好的答案 – iH8

回答

0

您可以将ID传给你的多边形实例作为一个选项参数:

foreach ($polygonresult as $row) { 

    echo "L.polygon(" . $row['coordinates'] . ", { id: " . $row['id'] . "}).addTo(drawnItems);"; 

} 

现在,当您从drawnItems层,抓删除多边形处理draw:deleted事件。它返回一个L.LayerGroup您可以遍历处理删除多边形:

map.on('draw:deleted', function (e) { 

    var layers = e.layers; 

    layers.eachLayer(function (layer) { 

     var xhttp = new XMLHttpRequest(); 
     xhttp.onreadystatechange = function() { 
      if (xhttp.readyState == 4 && xhttp.status == 200) { 
       //alert("Deleted!"); 
      } 
     }; 
     xhttp.open("POST", "inc/send.php?a=delete&t=polygon&i=" + layer.options.id, true); 
     xhttp.send(); 

    }); 

}); 

现在在服务器端,搭上GET参数i,并从数据库中删除多边形:

if(isset($_GET['i']) && isset($_GET['t']) && isset($_GET['a'])){ 

    $id = $_GET['i']; 
    $type = $_GET['t']; 
    $action = $_GET['a']; 

    if ($type == "polygon" && $action == "delete") { 

     $sth = $dbh->prepare('DELETE FROM polygons WHERE id = :id'); 
     $sth->bindParam(':id', $id); 
     $sth->execute(); 

    } 

} 

就是这样。请注意,免责声明:我无法测试它,所以我不得不徒手它,而且自从完成PHP之后,这已经很长时间了。但据我所知,应该没问题。祝你好运!

+0

谢谢,这工作! –

+0

不用了,谢谢,你总是欢迎,这就是我的意思:)我喜欢警告你,我不知道这是否会成为你的实际执行情况,它是相当不安全的。你真的需要在服务器端进行一些输入验证和验证,因为这样很容易被滥用。只需访问URL inc/send.php?a = delete&t = polygon&i =(猜一些id)'就可能删除任何多边形。恶意用户将有一个现场日 – iH8

+0

我知道,我把它放在一个CMS(当然有安全登录),只有某些用户有权编辑/删除多边形/多段线/等。 –