好的,我现在找到了适合我的解决方案。还有很多优化,但想分享我的方法。
我将 SVG 数据存储在数据库中,所以我的使用可能与其他人不同,但方法可能相同。
第 1 步:存储每个 svg 路径的所有 d="" 属性,重要的是所有坐标都存储在绝对值中,因此我从预数据库插入运行 Snap.Path.ToAbsolute 函数:
$('#Test').click(function () {
$('path').each( function() {
pathh = (this).getAttribute('d');
pathAbs = Snap.path.toAbsolute(pathh);
console.log(pathh);
this.setAttribute('d', pathAbs);
});
});
第 2 步:现在我将之前放入数据库中的所有路径 d 属性,并将它们拉得更远,将每个带有经度和纬度的坐标存储在与原始路径 ID 相关的单独表中。
function GetRegionCoords($String, $Path) {
global $main;
$output = preg_split( "/(M|L|Z|C|A|z)/", $String );
$output = array_filter($output);
foreach ($output as $coord) {
$latNlong = explode(",", $coord);
$query = "INSERT INTO path_coords (RegionID, Latitude, Longitude) VALUES ('$RegionID', '$latNlong[0]', '$latNlong[1]')";
$result = mysqli_query($main, $query);
}
第 3 步:在此阶段,只需选择所有条目并比较它们的经度和纬度值,以及它们是否在一定范围内(不准确,因为人类会出错,并且点总是正好在彼此之上) ,然后是他们的邻居。
这是这段代码的早期阶段,所以我为任何错误道歉,但现在其他人至少有机会看到我的处理方法。
我在这里的中间区域测试了它以找到它的邻居,我的代码找到了所有这些:
所以它对我来说是完美的。
感谢您的建议。