Клуб API Карт

Как вывести все объекты из базы геокодированием?

sozdanie-saita-spb
9 февраля 2010, 02:16
Подскажите, пожалуйста, как вывести все объекты из базы данных, которые лежат по принципу: 
Город, улица, номер дома.
Непонятно как. Обрабатывать XML-схему ответа геокодера? Подскажите, кто сталкивался.
 Что добавить надо в скрипт?
<script type="text/javascript">
       var map, geoResult;

       // Создание обработчика для события window.onLoad
       YMaps.jQuery(function () {
           // Создание экземпляра карты и его привязка к созданному контейнеру
           map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]);

           // Установка для карты ее центра и масштаба
           map.setCenter(new YMaps.GeoPoint(37.64, 55.76), 10);

         
           // Добавление элементов управления
           
           

            // Создание позиций для элемента управления
           var topLeftPos = new YMaps.ControlPosition(YMaps.ControlPosition.TOP_LEFT, new YMaps.Size(190, 15)),
               topRightPos = new YMaps.ControlPosition(YMaps.ControlPosition.TOP_RIGHT, new YMaps.Size(170, 15)),
               scaleLine = new YMaps.ScaleLine(),
               curPos = topLeftPos;

           // Добавление элементов управления
           map.addControl(scaleLine, curPos);
           map.addControl(new YMaps.TypeControl(), new YMaps.ControlPosition(YMaps.ControlPosition.TOP_LEFT));
           map.addControl(new YMaps.Zoom());
           map.addControl(new YMaps.MiniMap(), new YMaps.ControlPosition(YMaps.ControlPosition.TOP_RIGHT));

   


       // Функция для отображения результата геокодирования
       // Параметр value - адрес объекта для поиска
     
           // Удаление предыдущего результата поиска
           value="Санкт-Петербург,Н- район, Н пр.,32";
            map.removeOverlay(geoResult);

           // Запуск процесса геокодирования
           var geocoder = new YMaps.Geocoder(value, {results: 1, boundedBy: map.getBounds()});

           // Создание обработчика для успешного завершения геокодирования
           YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
               // Если объект был найден, то добавляем его на карту
               // и центрируем карту по области обзора найденного объекта
               if (this.length()) {
                   geoResult = this.get(0);
                    // Создание метки и добавление ее на карту
        // var geoResult = new YMaps.Placemark(geoResult, {style: "example#customPoint"});
               
                   map.addOverlay(geoResult, {style: "example#customPoint"});
                    map.setBounds(geoResult.getBounds());
                   
               }else {
                   alert("Ничего не найдено")
               }
           });

           // Процесс геокодирования завершен неудачно
           YMaps.Events.observe(geocoder, geocoder.Events.Fault, function (geocoder, error) {
               alert("Произошла ошибка: " + error);
           })
       });
7 комментариев
Подписаться на комментарии к посту
Изначально неверный подход. Зачем вам каждый раз на выводе делать геокодирование... Пожалейте всех - себя, посетителей вашего сайта и сервера Яндекса. Геокодирование имеет смысл делать при добавлении/редактировании объекта - и сразу писать координаты в базу. А уже потом по координатам выводить точки. Если же у вас уже есть база адресов - то запустите один раз скрипт, который пройдется по адресам и запишет в базу координаты. Пример такого скрипта могу дать, если сами затруднитесь написать.
Я сам принцип получения координат из Геокодера не понимаю. Необходимо парсить его ответ на PHP? NeWMaN, за пример был бы очень благодарен.
Есть два варианта использования геокодера. 1. Это использование его из JavaScript API - вы его как раз привели. В результате вы получаете объект - точку на карте. Потом достаточно добавить его на карту - и все. Либо если нужно передать координаты на сервер, то можно извернуться... Получить координаты из объекта вполне возможно, а потом сформировать запрос на сервер посредством AJAX. Но как я уже говорил - подход не совсем правильный. 2. Возможно использовать HTTP геокодер. Тут никакого JS а чисто серверные технологии. Т.е. формируете запрос по HTTP - в ответ получаете XML и парсите его и выцепляете координаты, и другую информацию. Пример кода вот здесь: http://codepaste.ru/3053/
В PHP есть много библиотек для работы с xml.
Может воспользоваться ими.

http://php.net/manual/en/book.simplexml.php
http://php.net/manual/en/book.xml.php
Ага. Это если нужен более подробный анализ файла. Для некоторыхх случаев и проще и быстрей выцепить нужные значения с помощью regexp или вообще с помощью строковых функций.
Спасибо, NeWMan, все работает как часы=)))) Отличный совет.

 здравствуйте. Почитала, посмотрела пример. У меня координаты уже лежат в базе посредством использования как раз геокодера и манипуляций php.

Я сейчас запуталась. Как мне все взять точки из базы и вывести их на карту. То ли действительно ajax использовать, то ли формировать xml отдельный из этого всего. Хотя может есть и проще способ? Подскажите?