所以这些区域是由SVG路径构成的。
我需要一种计算共享边界的方法。是否有一种很好的方法可以从2个路径中获取d =“”值,并将它们相互匹配?如果它们具有相似的坐标+/-如果它们完全相同则会出现错误的余量?
这将在服务器端完成,而不是客户端,不确定是否重要:)
非常感谢你们。
答案 0 :(得分:0)
好的,我现在找到了一个适合我的解决方案。还有很多优化,但想分享我的方法。
我将SVG数据存储在数据库中,因此我的使用可能与其他数据不同,但方法可能相同。
步骤1:存储每个svg路径的所有d =“”属性,重要的是所有坐标都存储在Absolute中,所以我从数据库前插入运行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:在这个阶段,只需选择所有条目并比较它们的经度和纬度值,以及它们是否在一定范围内(不完全是因为人类得到错误,并且积分总是完全在彼此之上) ,然后他们的邻居。
这是此代码的早期阶段,所以我为任何错误道歉,但现在其他人有机会至少看到我的方法。
我在中间区域测试了这个以找到它的邻居,我的代码找到了所有这些:
所以它对我来说非常完美。
感谢您的建议。