0

我的查询是在 UIMAPVIEW 上绘制点所需的最小距离,以便它们可以显示为不同的点。例如,假设如果有用户在同一个公寓里,他们的经纬度之间几乎没有任何距离。那么我该如何区分它们!

4

1 回答 1

1

通常有两种方法 - 一种是聚类,这意味着您使用带有数字的标记,该数字表示有多少基础标记。当点击它时,然后向用户显示单独的标记(或递归放大,越来越多地分割标记)。Superpin (www.getsuperpin.com) 就是一个例子,但还有其他例子。

另一种方法是使标记实际偏离其实际位置。为此,您需要某种分布算法来将其抵消得恰到好处 - 也就是说,将标记设置得尽可能靠近,同时仍为它们提供足够的表面积以供看到/触摸。为此,我们使用斐波那契的向日葵模式。您需要做的是识别具有相同坐标的所有注释,将它们分组,然后按顺序绘制每个组,同时将一个组与另一个组偏移 - 例如。有一些代码沿着螺旋形状迭代并沿着该螺旋下降标记。

如果您想采用第二种方法,可以提供示例代码等以提供帮助,请告诉我。

编辑:我找到了一些我们为此编写的代码,但这不是客观的 C。你能看懂吗?

class SunFlower
{
    static $SEED_RADIUS = 2;
    static $SCALE_FACTOR = 4;
    static $PI2 = 6.28318531; // PI * 2
    static $PHI = 1.61803399; // (sqrt(5)+1) / 2

    public static function calcPos($xc, $yc, $factor, $i)
    {
        $theta = $i * SunFlower::$PI2 / SunFlower::$PHI;
        $r = sqrt($i) * $factor;
        $x = $xc + $r * cos($theta);
        $y = $yc - $r * sin($theta);

        if ($i == 1) {
            $y += ($factor * 0.5);
        }

        return array($x, $y);
    }
}
于 2013-09-15T06:20:54.463 回答