Php 从数据库加载可见区域的标记

Php 从数据库加载可见区域的标记,php,google-maps-api-3,google-maps-markers,Php,Google Maps Api 3,Google Maps Markers,我试图从包含每个标记的lat和lng的数据库中加载标记(实际上是自定义覆盖)。我只想加载谷歌地图当前可见区域中的标记 我要做的是得到地图边界,并计算最大和最小lat和lng。每次拖动或更改缩放时,我都使用ajax发送这些边界,然后使用sql查询从数据库中检索正确的标记,如下所示: AND lat BETWEEN :minLat AND :maxLat AND lng BETWEEN :minLng AND :maxLng 这很好用。。。除非我现在在谷歌地图的两个重复世界之间寻找

我试图从包含每个标记的lat和lng的数据库中加载标记(实际上是自定义覆盖)。我只想加载谷歌地图当前可见区域中的标记

我要做的是得到地图边界,并计算最大和最小lat和lng。每次拖动或更改缩放时,我都使用ajax发送这些边界,然后使用sql查询从数据库中检索正确的标记,如下所示:

    AND lat BETWEEN :minLat AND :maxLat
    AND lng BETWEEN :minLng AND :maxLng
这很好用。。。除非我现在在谷歌地图的两个重复世界之间寻找

sql查询将不再使用这些映射边界(sw和ne),因为每个边界都来自各自的世界。那我就不会找回任何标记了

示例:澳大利亚的lng=150,在这种情况下,我会 最小液化天然气=25(西南)和最大液化天然气=0(东北)。。。很明显,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
        );

    }
//正常情况
如果($swLng<$neLng)
{
$ANDOR_lng=“和”;
}
//世界重演的案例
其他的
{
$ANDOR_lng=“或”;
}
$dql=“选择MYSTUFF…”。。。
和lat介于:latA和:latB之间
和(液化天然气>:lngA.“$ANDOR_lng.”液化天然气<:lngB)”;
$parameters=数组(
“拉塔”=>$swLat,
“latB”=>neLat美元,
“lngA”=>swLng美元,
“lngB”=>$neLng
);
}

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

:minLng < :maxLng
如果您查看上面的地图,这与绘制地图时的操作一致:
sw
角的经度大于
ne


警告:我已经好几年没有编写PHP代码了,我不知道你是否真的可以用
a,b=b,a
来交换它们的值,我只知道这在Python中是有效的,但你明白了。

问题是你使用了错误的边界。您需要获得像素边界,而不是坐标边界。如果你得到了像素边界,那么我认为查询可以工作,因为没有这样的问题。

Cool,这是一个很好的反转匹配的方法:)
( lng > :minLng AND lng < :maxLng )
if(:minLng > :maxLng) {
  :minLng, :maxLng = :maxLng, :minLng
}