【发布时间】:2012-01-28 19:31:21
【问题描述】:
我正在尝试从包含每个标记的 lat 和 lng 的数据库中加载标记(实际上是自定义叠加)。我想只加载谷歌地图当前可见区域中的标记。
我所做的是获取地图边界并计算最大和最小 lat 和 lng。每次拖动或更改缩放时,我都会使用 ajax 发送这些边界,然后使用如下所示的 sql 查询从数据库中检索正确的标记:
AND lat BETWEEN :minLat AND :maxLat
AND lng BETWEEN :minLng AND :maxLng
这很好......除非我目前正在谷歌地图的两个重复世界之间寻找。
sql 查询将不再适用于这些地图边界(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
);
}
【问题讨论】:
标签: php google-maps-api-3 google-maps-markers