Я пытаюсь загрузить маркеры (собственно оверлей) из моей базы данных, которая содержит значения lat и lng каждого маркера. Я хотел бы загрузить только маркеры в текущей видимой области карты Google.
Что я делаю, так это то, что получаю границы карты и вычисляю максимальные и минимальные значения широты и долготы. Каждый раз, когда я перетаскиваю или изменяю масштаб, я отправляю эти границы, используя ajax, а затем извлекаю нужные маркеры из своей базы данных, используя SQL-запрос, который выглядит следующим образом:
AND lat BETWEEN :minLat AND :maxLat
AND lng BETWEEN :minLng AND :maxLng
Это работает нормально ... за исключением случаев, когда я в настоящее время смотрю между 2 повторными мирами карты Google.
![enter image description here](https://i.stack.imgur.com/vc9jL.png)
Запрос 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
);
}