Клуб API Карт

Генерация YMapsML с помощью PHP

smelkov2008
25 декабря 2010, 10:28

Здравствуйте.

Кто как генерирует xml для ymaps.

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

А вот как генерировать, пробовал простым

echo в PHP выводить сначала

echo "<?xml version=1.0 encoding=UTF-8?>";
echo
"<ymaps:ymaps xmlns:ymaps=http://maps.yandex.ru/ymaps/1.x
xmlns:gml=http://www.opengis.net/gml
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation=http://maps.yandex.ru/schemas/ymaps/1.x/ymaps.xsd>";
echo " <ymaps:GeoObjectCollection>";
echo " <gml:name>Мастер и Маргарита на Яндекс.Картах</gml:name>";
echo "<gml:featureMembers>";
echo "<ymaps:GeoObject>";
echo "<gml:name>Патриаршие пруды</gml:name>

echo " <gml:Point> ";
echo " <gml:pos>37.592111 55.763969</gml:pos>";
echo " </gml:Point>";
echo " </ymaps:GeoObject>";
echo " </gml:featureMembers>";
echo " </ymaps:GeoObjectCollection>";
echo "</ymaps:ymaps>";

а потов в цикле данные из базы, но как то не работает вывод echo в шапке.

Наведите на мысль"

12 комментариев
Подписаться на комментарии к посту
echo конечно плохой вариант.
Используйте DOM или SimpleXML
уберите эхи, да и сам пхп до и после моментов работы цикла..
те


?>



Заодно, если редактор не блокнот - увидите все ошибки написания.

Вариант два - использовать операнды типа <<< >>>

Типа:

 $value= <<
http://www.opengis.net/kml/2.2"
     xmlns:atom="http://www.w3.org/2005/Atom">
 
    {$r[1]} в виде KML
   
      {$owner}
   
   
   
      {$r[1]}
      {$desc}
     
        {$coord}
     
   
 

kkkk;


А DOM\SXML предложеные лунатиком я бы не советовал - они имеют работать раз в 20 дольше чем прямой вывод.

Извените.


Ничего не могу понять,


но ваш код



http://www.opengis.net/kml/2.2"
xmlns:atom="http://www.w3.org/2005/Atom">

{$r[1]} в виде KML

{$owner}


вообще не подходит под стендарт тот что в API 


Я так понимаю что мне нужно в точности сгенерировать php файлом из базы MySQL, xml файл, и подставить его карте, но php конфликтует с xml вставками, запутаный круг.


У меня всезде пишет syntax error.....





Вот попытался сгенерировать пример из  API


без этой шапки


http://maps.yandex.ru/ymaps/1.x" xmlns:repr="http://maps.yandex.ru/representation/1.x" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maps.yandex.ru/schemas/ymaps/1.x/ymaps.xsd"


я вообще не пойму как её вписать с помощью SimpleXML,


вот код исходный код



$xml=new DomDocument('1.0','utf-8');
$sorts = $xml->appendChild($xml->createElement('ymaps:GeoObjectCollection'));
$sort = $sorts->appendChild($xml->createElement('sort'));
$name = $sort->appendChild($xml->createElement('name'));
$name->appendChild($xml->createTextNode('Яблоко'));
$xml->formatOutput = true;
$xml->save('goods.xml');
?>


После генерации файла goods.xml и открытия его в браузере, брузер пишет (синтаксическая ошибка)


на строку


Не пойму что ему не нравится

 



я вообще не пойму как её вписать с помощью SimpleXML,



Вот пример:


$ns = array(
    'ymaps' => 'http://maps.yandex.ru/ymaps/1.x',
    'gml' => 'http://www.opengis.net/gml',
);

$xml = new SimpleXMLElement('');

$collection = $xml->addChild('GeoObjectCollection', NULL, $ns['ymaps'])
                  ->addChild('featureMembers', NULL, $ns['gml']);

// Массив $data тут для примера в вашем коде итерируйтесь по mysql_fetch_array
$data = array('Москва', 'Питер', 'Екатеринбург');

foreach($data as &$item) {
    $go = $collection->addChild('GeoObject', NULL, $ns['ymaps']);
    $go->addChild('name', $item, $ns['gml']);
}
header('Content-Type: text/xml');
echo $xml->asXML();
Попробуйте сохранить то что выводит ваш скрипт в файл, а потом открыть в редакторе с подсветкой синтаксиса. И тогда syntax error превратитьсяв болне осязаемую и исправляемую ошибку.

А DOM\SXML предложеные лунатиком я бы не советовал - они имеют работать раз в 20 дольше чем прямой вывод.


Если так важна скорость (думаю, что в данном случае не важна)
я бы не советовал PHP, пусть сразу на C пишет, ага.

Не могу составить правельный код SimplXML


На основе моих переменный помогите составить правельный код simpleXML


$result_type = mysql_query("SELECT * FROM `catalog` WHERE type=1);
$mar_type = mysql_fetch_array($result_type);




$lonmap = "39.722378"; //Координаты точки


$lat = "43.58270"; //Координаты точки


$nazvanie = "Название точки"; //Выводится в балуне в виде HTML


$kategor = "Категория точки"; //Выводится в балуне в виде HTML


$opisanie = "Описание точки"; //Выводится в балуне в виде HTML


$stil = "bankIcon"; //Название стиля для метки (картинки)


$img "http://api-maps.yandex.ru/i/0.4/icons/bank.png";//URL Изображения для метки.




выводится точка, балун с HTML внутри.


Помогите составить правельный simpleXML код.


Я может что-то не то делаю, но какие еще методы есть групировки точек, и вывода их по нажитю на ссылку.

в данной задаче не требуется, так как она уже выполняется быстрее кванта времени, и ускорить можно только изменив тип архитектуры
хорошо, хередок быстрее в кванте o_O
можешь поделится с пользователем примером вывода точек из базы в YMapsML?
1.берется база, из нее запрашиваются данные после чего весь массив делается echo json_encode($data/* hint: UTF-8 */) и файл закрывается.
2.берется другой файл который процесе свой работы в базу не лезет, а запрашивает этот самый json


Header("Content-Type: text/xml");
echo("\n");
?>
http://maps.yandex.ru/ymaps/1.x" xmlns:gml="http://www.opengis.net/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maps.yandex.ru/schemas/ymaps/1.x/ymaps.xsd">
http://maps.yandex.ru/representation/1.x">
       





$dataset=$json=json_decode(file_get_contents("http://blabla.ru/ajax/z/list.php?id=$catid"));
foreach($json as $k=>$v){
?>
     
          hars(iconv("UTF-8","cp1251//IGNORE",$v->name)); ?>
       
          lng." ".$v->lat); ?>
       
    
        
                         xmlDump($v);
            ?>
        
       
     

}
?>



в данном случае нету шапки которая определит некий стиль и catid, но это ИМХО детали реализации
Забудьте о всяких раширениях, xml прекрасно выводится echo'ми, только перед выводом данных в поток пошлите команду header("text\xml"); это позволит интерпретировать выдаваемые вами данные именно как xml