Клуб API Карт

Разъясните ситуацию

bratyxa-servis
26 декабря 2013, 18:29

Привет всем. сегодня делаю привязку пользователей к месту жительства. Так вот хочу сделать в редактировании данных карту с записью в бд. Карта с записью в бд у меня есть, но мне понадобилось сделать зависимые селекты по городам что бы выбрал город и он появился на карте. в интернете ничего такого не нашел. Надеюсь, у Вас есть ссылка на готовый пример. Города хочу выводить из бд, но вот только не знаю как быть  c id? Как yandex находит нужную точку по самому названию города или по его id. Есть ли какая-нибудь база msql. Заранее большое спасибо.

6 комментариев
Подписаться на комментарии к посту
Найти координаты по названию города вам поможет геокодер — http://api.yandex.ru/maps/doc/geocoder/desc/concepts/About.xml
Список городов может предоставить например КЛАДР — http://kladr-api.ru/

А у вас нет реализации зависимых списков городов просто у меня не очень с js, ищу в интернете не могу найти. Зарание большое спасибо

Большое спасибо, думаю, что разберусь с кодом, есть еще один вопрос, прочитал комментарии к скрипту, но нигде не нашел ответа. Есть ли возможность сначала определить по ip месторасположение пользователя и выводить карту, где он находится, а только потом, если он захочет, воспользуется селектом для выбора города. Мне просто надо получить координаты точки, которую пользователь выберет. В Вашем  случае ему пройдется постоянно пользоваться селектом, а так ему просто необходимо выбрать точку. Большое спасибо за ответ

пример определения местоположения есть в песочнице

http://api.yandex.ru/maps/jsbox/geolocation_ip

С определение месторасположения по ip я сделал, правда, пока без селектов. У меня другая проблема возникла - есть скрипт, который определяет координаты выбранной точки и записывает ее в бд. Дело  в том что пользователю надо сделать два клика, что бы выбрать нужное ему месторасположение( делает клик выскакивает кнопка выбрать это месторасположение и только потом идет определение координат). Так вот можно ли как то что бы пользователь просто щелкнул по карте и пошло определение. Вот скрипт, который я использую



а вот php если нужноheader('Content-Type: text/html; charset=utf-8');require_once "html_filter_class.php";$tags_set = array('h1'=> array('id', 'class'),'h2'=> array('id', 'class'),'h3'=> array('id', 'class'),'h4'=> array('id', 'class'),'h5'=> array('id', 'class'),'h6'=> array('id', 'class'),'p'=> array('id', 'class'),'span'=> array('id', 'class'),'a'=> array('id', 'class', 'href'),'img'=> array('id', 'class', 'src', 'alt', FALSE),'br'=> array(FALSE),'hr'=> array(FALSE),'strong'=> array('id', 'class'),'div'=> array('id', 'class', 'style'),'ul'=> array('id', 'class'),'ol'=> array('id', 'class'),'li'=> array('id', 'class'),'table'=> array('id', 'class'),'tr'=> array('id', 'class'),'td'=> array('id', 'class'),'th'=> array('id', 'class'),'thead'=> array('id', 'class'),'tbody'=> array('id', 'class'),'tfoot'=> array('id', 'class'));//Этот метод устанавливает тэги для фильтрацииfunction set_tags($arr=array()){if(!is_array($arr)) $arr=array();foreach($arr as $key=>$value){for($i=0; $i$arr[$key][$i] = strtolower($arr[$key][$i]);}}$this->tags = array_change_key_case($arr);}$html_filter = new html_filter();$html_filter->set_tags($tags_set);$city_brest= array(   'Брест',  'Барановичи',    'Берёза',    'Ганцевичи',    'Давид-Городок',    'Дрогичин',    'Жабинка',    'Иваново',    'Ивацевичи',    'Каменец',    'Кобрин',    'Лунинец',    'Ляховичи',    'Малорита',    'Пинск',    'Пружаны',    'Столин');$city_minsk= array('Минск',  'Березино',    'Борисов',    'Вилейка',    'Воложин',    'Дзержинск',    'Жодино',    'Клецк',    'Копыль',    'Крупки',    'Логойск',    'Любань',    'Марьина Горка',    'Молодечно',    'Мядель',    'Несвиж',    'Слуцк',    'Смиловичи',    'Смолевичи',    'Солигорск',    'Старые Дороги',    'Столбцы',    'Узда',    'Фаниполь',    'Червень' );$city_vitebsk= array( 'Витебск','Бешенковичи',    'Браслав',    'Верхнедвинск',    'Глубокое',    'Городок',    'Докшицы',    'Дубровно',    'Лепель',    'Лиозно',    'Миоры',    'Новополоцк',    'Орша',    'Полоцк',    'Поставы',    'Россоны',    'Сенно',    'Толочин',    'Ушачи',    'Чашники',    'Шарковщина',    'Шумилино');$city_gomel= array('Гомель',  'Брагин',    'Буда-Кошелёво',    'Ветка',    'Добруш',    'Ельск',    'Житковичи',    'Жлобин',    'Калинковичи',    'Корма',    'Лельчицы',    'Лоев',    'Мозырь',    'Наровля',    'Октябрьский',    'Петриков',    'Речица',    'Рогачёв',    'Светлогорск',    'Хойники',    'Чечерск');$city_grodno= array('Гродно','Большая Берестовица',    'Волковыск',    'Вороново',    'Дятлово',    'Зельва',    'Ивье',    'Кореличи',    'Лида',    'Мосты',    'Новогрудок',    'Островец',    'Ошмяны',    'Свислочь',    'Слоним',    'Сморгонь',    'Щучин');$city_magelev= array('Могилёв','Белыничи','Бобруйск','Быхов','Глуск','Горки','Дрибин','Кировск','Климовичи','Кличев','Костюковичи','Краснополье','Кричев','Круглое','Мстиславль','Осиповичи','Славгород','Хотимск','Чаусы','Чериков');  $lat = $_POST['lat'];$lon = $_POST['lon'];@$obj = simplexml_load_string(file_get_contents('http://geocode-maps.yandex.ru/1.x/?geocode='.$lon.','.$lat));$area = $obj->        GeoObjectCollection->        featureMember->        GeoObject->        metaDataProperty->        GeocoderMetaData->        AddressDetails->        Country->        AdministrativeArea->        AdministrativeAreaName;$region = $obj->        GeoObjectCollection->        featureMember->        GeoObject->        metaDataProperty->        GeocoderMetaData->        AddressDetails->        Country->        AdministrativeArea->        SubAdministrativeArea->SubAdministrativeAreaName;if(!isset($region)){    $city = $obj->        GeoObjectCollection->        featureMember->        GeoObject->        metaDataProperty->        GeocoderMetaData->        AddressDetails->        Country->        AdministrativeArea->        Locality->        LocalityName;$strit = $obj->        GeoObjectCollection->        featureMember->        GeoObject->        metaDataProperty->        GeocoderMetaData->        AddressDetails->        Country->        AdministrativeArea->        Locality->Thoroughfare->ThoroughfareName;}else{$city = $obj->        GeoObjectCollection->        featureMember->        GeoObject->        metaDataProperty->        GeocoderMetaData->        AddressDetails->        Country->        AdministrativeArea->SubAdministrativeArea->        Locality->        LocalityName;$strit = $obj->        GeoObjectCollection->        featureMember->        GeoObject->        metaDataProperty->        GeocoderMetaData->        AddressDetails->        Country->        AdministrativeArea->SubAdministrativeArea->        Locality->Thoroughfare->ThoroughfareName;}if(!isset($area)){$city = $obj->        GeoObjectCollection->        featureMember->        GeoObject->        metaDataProperty->        GeocoderMetaData->        AddressDetails->        Country->        Locality->        LocalityName;$strit = $obj->        GeoObjectCollection->        featureMember->        GeoObject->        metaDataProperty->        GeocoderMetaData->        AddressDetails->        Country->        Locality->Thoroughfare->ThoroughfareName;if($city=='Минск'){$area = 'Минская область';} }$new_obl=iconv('UTF-8', 'UTF-8',  $area);$new_city= iconv('UTF-8', 'UTF-8', $city);$region= iconv('UTF-8', 'UTF-8', $region);$new_strit = iconv('UTF-8', 'UTF-8', $strit);function getCitySelect($city_arr)    {echo ''; foreach($city_arr as $name_city)  { echo''.$name_city.'';}echo '';            }if(!isset($city)){$warning = 'К сожалению адрес установить не удалось';}else{ $warning ='';}echo $warning.'Город поселок или др. Улица, дом максимум 60 символов '.$city_b;if(in_array($new_city, $city_magelev) OR in_array($new_city, $city_grodno) OR in_array($new_city, $city_gomel) OR in_array($new_city, $city_vitebsk) OR in_array($new_city, $city_minsk) OR in_array($new_city, $city_brest)){$selekt_city=''; $city_saize= 1;}else{$city_saize= 2;if($area=='Минская область'){$selekt_city = getCitySelect($city_minsk);}elseif($area=='Брестская область'){$selekt_city = getCitySelect($city_brest);}elseif($area=='Гомельская область'){$selekt_city = getCitySelect($city_gomel);}elseif($area=='Гродненская область'){$selekt_city = getCitySelect($city_grodno);}elseif($area=='Витебская область'){$selekt_city = getCitySelect($city_vitebsk);}elseif($area=='Могилёвская область'){$selekt_city = getCitySelect($city_magelev);}else{$selekt_city ='';}}if($city_saize==2){ if(isset($city)){echo 'укажите ближайший большой город  Если Вы указываете задачу в поселке и других небольших селения лучше указывать ближайший большой город. Это поможет для лучшего поиска Вашей задачи. Если выбрать ближайший большой город, метка на карте останется на прежнем месте. Если  в списке нет города, который Вы хотели выбрать, пожалуйста, сообщите об этом в службу поддержки.';}}echo ' ';?>

Насчет этого php файла у меня тоже сомнения в том что это правильный вариант как определить адрес точки может есть готовые модули. Большое спасибо за ответ. Где здесь можно вставить код?