gpt4 book ai didi

php - 从数据库中加载可见区域的标记

转载 作者:搜寻专家 更新时间:2023-10-31 20:49:53 24 4
gpt4 key购买 nike

我正在尝试从我的数据库中加载标记(实际上是自定义叠加层),其中包含每个标记的纬度和经度。我只想加载谷歌地图当前可见区域中的标记。

我所做的是获取 map 边界并计算最大和最小纬度和经度。每次我拖动或更改缩放比例时,我都会使用 ajax 发送这些边界,然后我使用如下所示的 sql 查询从我的数据库中检索正确的标记:

    AND lat BETWEEN :minLat AND :maxLat
AND lng BETWEEN :minLng AND :maxLng

这工作正常......除非我目前正在谷歌地图的 2 个重复世界之间寻找。

enter image description here

sql 查询将不再适用于那些 map 边界(sw 和 ne),因为每个边界都来自它们各自的世界。然后我不会检索任何标记。

示例:澳大利亚大约是 lng = 150,在这种情况下我会minLng = 25 (sw) 和 maxLng = 0 (ne)...显然 150 不在 0 到 25 之间,即使我现在正在看澳大利亚。

我还没有看到关于那个特定问题的任何问题......有解决这个问题的想法吗?我做错了什么?

编辑:我终于解决了我的问题...这是我所做的:

    // normal case
if( $swLng < $neLng )
{
$ANDOR_lng = "AND";
}
// Case where world repeated
else
{
$ANDOR_lng = "OR";
}

$dql = "SELECT MYSTUFF ...
AND lat BETWEEN :latA AND :latB
AND ( lng > :lngA ".$ANDOR_lng." lng < :lngB )";

$parameters = array(
'latA' => $swLat,
'latB' => $neLat,
'lngA' => $swLng,
'lngB' => $neLng
);

}

最佳答案

通常,您会期望w(西经)小于e(东经),即:

:minLng < :maxLng

但是,当边界框包含 180(或 -180)处的子午线时,情况就不是这样了。在那些情况下,这部分查询永远不会返回 true:

( lng > :minLng AND lng < :maxLng )

您可以做的是交换 :minLng:maxLng 以便上述假设再次变为真:

if(:minLng > :maxLng) {
:minLng, :maxLng = :maxLng, :minLng
}

如果您查看上面的 map ,这与您绘制它时所做的是一致的:sw 角的经度比 ne 角的经度大。

警告:我已经很多年没有写过 PHP 代码了,我不知道你是否真的可以通过 a, b = b, a 来交换它们的值,我只知道在Python,但你明白了。

关于php - 从数据库中加载可见区域的标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9047927/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com