【问题标题】:Check if SVG Paths are next to eachother?检查 SVG 路径是否彼此相邻?
【发布时间】:2015-06-08 20:49:51
【问题描述】:

所以我有这些区域由 SVG 路径组成。

我需要一种计算共享边界的方法。有没有一种很好的方法可以从 2 条路径中获取 d="" 值,并将它们相互匹配?如果它们具有相似的坐标 +/- 如果它们不完全相同,则会有一些误差余量?

这将在服务器端而不是客户端完成,不确定是否重要:)

非常感谢各位。

【问题讨论】:

  • 在搜索“svc adjacency”时似乎出现了一些有用的搜索结果
  • 也许我是盲人,但我找到的答案都无法计算出来? :)
  • intersection library 可以提供帮助。
  • 我会去看看 Lars。谢谢
  • 这些形状中的一些不会相互重叠,所以交叉点库在这里不起作用?除非我调整库以允许几乎重叠,呵呵,拉斯有什么想法吗?

标签: javascript php svg


【解决方案1】:

好的,我现在找到了适合我的解决方案。还有很多优化,但想分享我的方法。

我将 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 步:在此阶段,只需选择所有条目并比较它们的经度和纬度值,以及它们是否在一定范围内(不准确,因为人类会出错,并且点总是正好在彼此之上) ,然后是他们的邻居。

这是这段代码的早期阶段,所以我为任何错误道歉,但现在其他人至少有机会看到我的处理方法。

我在这里的中间区域测试了它以找到它的邻居,我的代码找到了所有这些:

所以它对我来说是完美的。

感谢您的建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 2021-08-04
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多