Answer the question
In order to leave comments, you need to log in
How to make a plugin for modx revo that will geocode from the address the metro station, county and district?
Good afternoon, I have two plugin options that cope with this task, here is the one that is currently involved, please do not judge strictly, but help bring the code to a human form
First option:
<?php
$tv = $modx->getObject('modTemplateVar',array('name'=>'street')); // Получаем значение всех ТВ
$adres_value = $tv->getValue($id); // получаем id документа в котором находимся
$adres_output = $tv->renderOutput($id);// рендерим содержимое ТВ
$adress1=urlencode($adres_output);
$url="http://geocode-maps.yandex.ru/1.x/?geocode=".$adress1."&kind=metro&results=3";
$content=file_get_contents($url); // получаем страницу с координатами
preg_match('/<pos>(.*?)<\/pos>/',$content,$point); // вырезаем нужные нам координаты
$coordinaty=explode(' ',trim(strip_tags($point[1])));
//координаты объекта
$coords_xy = $coordinaty[0].','.$coordinaty[1];
$metro ="http://geocode-maps.yandex.ru/1.x/?geocode=".$coords_xy."&kind=metro&results=3";
$metro_xml = file_get_contents($metro);
preg_match('/<PremiseName>(.*?)<\/PremiseName>/',$metro_xml,$metro_point); // вырезаем нужные нам координаты для метро
$metro_coord=explode(' ',trim(strip_tags($metro_point[1])));
preg_match('/<AdministrativeAreaName>(.*?)<\/AdministrativeAreaName>/',$metro_xml,$okrug_point); // вырезаем нужные нам координаты для Округов
$okrug_coord=explode(' ',trim(strip_tags($okrug_point[1])));
$resource->setTVValue('okrug',$okrug_coord[0].' '.$okrug_coord[1].' '.$okrug_coord[2] ); // записываем значение округа в ТВ шку
$resource->setTVValue('metro',$metro_coord[1].' '.$metro_coord[2] );// записываем метро в Твшку
$resource->save();
<?php
$tv = $modx->getObject('modTemplateVar',array('name'=>'street')); // Получаем значение всех ТВ
$adres_value = $tv->getValue($id); // получаем id документа в котором находимся
$adres_output = $tv->renderOutput($id);// рендерим содержимое ТВ
$adress1=urlencode($adres_output);
$url="http://geocode-maps.yandex.ru/1.x/?geocode=".$adress1."&kind=metro&results=3";
$content=file_get_contents($url); // получаем страницу с координатами
preg_match('/<pos>(.*?)<\/pos>/',$content,$point); // вырезаем нужные нам координаты
$coordinaty=explode(' ',trim(strip_tags($point[1])));
//координаты объекта
$coords_xy = $coordinaty[0].','.$coordinaty[1];
$metro ="http://geocode-maps.yandex.ru/1.x/?geocode=".$coords_xy."&kind=metro&results=3";
$ch = curl_init(); // инициализирую curl
curl_setopt($ch, CURLOPT_URL, $metro);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
// получаю HTML в качестве результата
$output = curl_exec($ch);
// освобождаю память
curl_close($ch);
$metro_output = new SimpleXMLElement($output);
$metro_result = $metro_output->xpath('/Premise/PremiseName');;
while(list( , $node) = each($metro_result)) {
// в этом цикле нужно получить станции метро и записать их в ТВ но у меня не получается
}
$test = print_r($metro_result);
$resource->setTVValue('metro', $test);
$resource->save();
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question