У меня была такая же проблема. Я пытался решить эту проблему следующим образом.
- хранить long / lat в базе данных как десятичные дроби
- поставить индексы на столбцы long и lat
- используйте запрос типа
SELECT * FROM table WHERE long > $long_left AND long < $long_right AND lat > $lat_bottom AND lat < $lat_top
Я предлагаю также использовать MarkerManager
для обработки маркеров, если вы ожидаете большое количество маркеров, поскольку вы можете настроить маркеры так, чтобы они отображались только при определенных уровнях масштабирования.
хранение long / lat в виде десятичных дробей позволяет базе данных правильно сравнивать значения вместо необходимости преобразовывать значения перед их сравнением
индексы являются ключевыми с базами данных (ха ка :-)), используйте их правильно, но не злоупотребляйте ими