Нанесение маркеров в Google Maps API V3 - PullRequest
1 голос
/ 21 декабря 2011

Я новичок в написании кода для карт Google и обладаю ограниченными знаниями по Javascript и PHP. Однако мне удается написать файл PHP, который подключается к моей базе данных SQL и выводит файл XML. Хотя я не могу понять, как создать несколько маркеров, относящихся к XML-файлу, который ранее геокодировал координаты широты / долготы.

Я знаю, что функция создания рынка (?) Используется для создания рынка на карте, но я не знаю, как сказать функции перебирать генерируемый файл XML, а затем отображать маркер. Я думаю, что я хотел бы ограничить показ маркеров также на основе плитки, потому что все объекты, которые я хочу отобразить, находятся в радиусе 20 миль.

Направьте меня в правильном направлении, пожалуйста. Я не понимаю логику кода, по крайней мере, некоторые из них. Укажите мне на правильные статьи, и как примирить весь код вместе. Например, создание маркера, фильтрация по сетке и т. Д. Я знаю, что это можно сделать!

Спасибо.

Ответы [ 3 ]

1 голос
/ 21 декабря 2011

Сначала вам нужно научиться разбирать данные XML, чтобы вы могли использовать их с API Карт.Для этого я рекомендую использовать jQuery .Вот основная статья, с которой вы можете начать читать XML с помощью jQuery: http://think2loud.com/224-reading-xml-with-jquery/

Затем изучите документацию Карт Google , есть отличные примеры работы с маркерами.

Я думаю, что я хотел бы ограничить показ маркеров и на плитке, потому что все объекты, которые я хочу отобразить, находятся в радиусе 20 миль.

Я не знаюименно то, что вы просите здесь.Вы не можете, насколько я знаю, фильтр на основе плитки карты.Вы можете отображать маркеры, которые находятся в пределах X миль от конкретной точки.Самый простой способ сделать это - просто найти координаты, которые находятся в пределах определенной ограничительной рамки с широтой и долготой в пределах Х числа градусов от конкретной точки.Если бы вы сделали это таким образом, я бы порекомендовал сделать это на стороне сервера.Вот SQL-запрос, который фильтрует местоположения в пределах примерно 15 миль ( контекст статьи здесь ):

SELECT Address, SQRT(POWER(Latitude - @Latitude, 2) + POWER(Longitude - @Longitude, 2)) * 62.1371192 AS DistanceFromAddress
FROM Stores
WHERE ABS(Latitude - @Latitude) < 0.25 AND ABS(Longitude - @Longitude) < 0.25
ORDER BY DistanceFromAddress

Лучший способ сделать это - использовать формулу Haversine чтобы определить, находится ли точка в пределах диапазона.Вы можете жестко закодировать это самостоятельно: пример или использовать библиотеку Google Geometry (которая использует формулу haversine), чтобы выполнить это.

0 голосов
/ 29 декабря 2011

Я также использую Google Maps API для отображения маркеров - однако с JSON. Я нашел следующий относительно использования XML с маркерами:

 // Iterate through the rows, printing XML nodes for each
while ($row = @mysql_fetch_assoc($result)){
  // ADD TO XML DOCUMENT NODE
  echo '<marker ';
  echo 'name="' . parseToXML($row['name']) . '" ';
  echo 'address="' . parseToXML($row['address']) . '" ';
  echo 'lat="' . $row['lat'] . '" ';
  echo 'lng="' . $row['lng'] . '" ';
  echo 'type="' . $row['type'] . '" ';
  echo '/>';
}

Также хорошее обсуждение использования XML и других транспортов с этим API.

0 голосов
/ 21 декабря 2011

Существует много способов создания маркеров с данными XML.

  1. Напишите функцию php, которая вызывается при загрузке вашей страницы, и она выводит широту / долготу и другие данные, необходимые для построения маркеров, создания их всплывающих подсказок и т. Д. Вы можете отправлять данные в любом формате, например XML, JSON для fe. На данный момент Javascript не может читать файлы из внешнего интерфейса (в Chrome есть API, но я бы не советовал делать это, подход на стороне сервера безопаснее.)

  2. Чтобы просто увеличить область, в которой есть все маркеры, и не увидеть весь WORLD_VIEW gmaps, также есть много способов. Я знаю, что создаю объект LatLngBounds, который в основном похож на прямоугольник и просто охватывает все ваши маркеры. Затем в API GoogleMaps вы найдете метод с именем fitBounds, который является методом класса Map, который будет соответствовать этому объекту, который создает границу вокруг всех ваших маркеров на карте div.

Я могу дать вам код через скрипку, если хотите, дайте мне знать об этом.

...