我的查询是在UIMAPVIEW上绘制点所需的最小距离,以便它们可以显示为不同的点。 例如,假设在同一个公寓中有用户,他们的纬度 - 经度之间几乎没有任何距离。那么我如何区分它们呢?
答案 0 :(得分:1)
通常有两种方式 - 一种是聚类,这意味着您使用带有数字的标记来指示有多少基础标记。当点击它时,然后向用户显示单独的标记(或递归放大,其将标记分割得越来越多)。 Superpin(www.getsuperpin.com)就是一个例子,但还有其他一些例子。
另一种方法是将标记实际偏离其实际位置。为此,您需要某种分配算法来抵消它 - 也就是说,尽可能将标记设置在尽可能靠近的位置,同时仍然为它们提供足够的表面区域以供查看/触摸。为此,我们使用Fibonacci的向日葵模式。您需要做的是识别具有相同坐标的所有Annotations,对它们进行分组,然后按顺序绘制每个组,同时将其中一个相互抵消 - 例如。有一些代码沿着螺旋形状迭代并沿螺旋线下降标记。
如果您想要采用第二种方法,可以提供示例代码等,请告诉我。
编辑:我发现了一些我们为此编写的代码,但这不是客观的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);
}
}