Клуб API Карт

Помогите кто знаком с API

Theflashmail
24 ноября 2014, 14:49

У меня есть БД в которой есть названия и адреса магазинов, как вывести на карту метки по адресам, а в балуне, чтобы было название, которые считывается с БД, с помощью http-геокодера я адреса преобразую в координаты, как мне теперь имея в БД координаты, названия и адреса магазинов, поставить метки на карте, а в балун записать адрес.

 

Просто http-геокодер записывается координаты не в той последовательности в которой нужны, а в обратной и как запихнуть их в функцию Placemark ?

 

Вот сайт - http://skindoctors.ru/magazini

 

Вот код, как сейчас я вывожу каждый элемент геокодирую

  

 

<?php 

    Yii::import('application.modules.pages.models.MagShop');

    $mags = MagShop::model()->findall();

 

    Yii::import('application.modules.pages.models.MagCity');

    $gors = MagCity::model()->findall();

 

    Yii::import('application.modules.pages.models.MagMag');

    $magi = MagMag::model()->findall();

?>

 <div class="content">

    <div class="breadcrumb"><a href="/">Главная</a><span class="breadcrumb-separator"> &gt; </span><span class="breadcrumb-page">Где купить</span></div>

    <div class="shop">

        <h1>Где купить</h1>

        <div class="map_contener">

            <div class="map_search">

                <input type="text" value="" placeholder="Укажите адрес или станцию">

                <button>Поиск</button>

            </div>

            <div class="left_map">

                Мы представлены в городах

                <ul>

                    <?php

 

                        foreach ($gors as $key => $value) {

                            echo "<li>".$value->name."</li>";

                        }

                    ?>

                </ul>

                <div style="clear:both;border-bottom:2px solid grey; height:5px;width:95%;"></div>

                Мы сотрудничаем с Интернет магазинами

                <ul>

                    <?php

 

                        foreach ($magi as $key => $value) {

                            echo "<li><a href='".$value->href."'>".$value->name."</a></li>";

                        }

                    ?>

                </ul>

            </div>

 

            <div class="right_map">

                <div id="map"></div>

           

<div> <strong>Список всех точек продаж:</strong> <br> &nbsp;</div>

<div> 

 <?php

 

                        foreach ($mags as $key => $value) {

                            echo "<li>".$value->city->name.", ".$value->address.",  &nbsp; &nbsp; &nbsp; ".$value->name."</li>";

                        }

                    ?>

 

</div>

 

  </div>

        </div>                                

    

</div>

 

</div>

 

 

 

<?

 

    // Параметры

 

    $config = Array(

 

        'host' => 'skin.mysql',

 

        'user' => 'skin_mysql',

 

        'password' => '9rrcmayq',

 

        'dbname' => 'skin_doctors',

 

        'tablename' => 'mag_shop',

 

        'apikey' => 'AF9KblQBAAAA6RvWPAIAvuxkWoSjyU4iHKeb1mDBePif0eEAAAAAAAAAAAC5EzZ7TIXimaEFc9eXi2t2U20-RQ=='

 

    );

 

 

    $dp = mysql_connect($config['host'], $config['user'], $config['password']) or die('Ошибка при подключении к серверу СУБД: '.mysql_error());

 

    mysql_select_db($config['dbname']) or die('Невозможно выбрать БД с именем "'.$config['dbname'].'": '.mysql_error());

 

    mysql_query('SET NAMES utf8');

 

 

    $addresses = mysql_query('SELECT * FROM '.$config['tablename']) or die('Ошибка при выполнении запроса к таблице "'.$config['tablename'].'": '.mysql_error());

 

 

    $countGeocode = $countGeocodeFault = 0;

 

 

    $result = '<table style="width:600px">';

 

    while ($row = mysql_fetch_assoc($addresses)) {

 

        $countGeocode++;

 

 

        $xml = simplexml_load_file('http://geocode-maps.yandex.ru/1.x/?geocode='.urlencode($row["address"]).'&key='.urlencode($config['apikey']).'&results=1');

 

 

        $found = $xml->GeoObjectCollection->metaDataProperty->GeocoderResponseMetaData->found;

 

        if ($found > 0) {

 

            $coords = str_replace(' ', ',', $xml->GeoObjectCollection->featureMember->GeoObject->Point->pos);

 

            $result .= '<tr><td>'.$row['address'].'</td><td>'.$coords.'</td></tr>';

 

            mysql_query("UPDATE `{$config['tablename']}` SET coords = '".mysql_real_escape_string($coords)."' WHERE id = {$row['id']}") or die("Ошибка при обновлении данных в таблице: ".mysql_error());

 

        } else {

 

            $result .= '<tr style="color:red"><td>'.$row['address'].'</td><td>ошибка</td></tr>';

 

            $countGeocodeFault++;

 

        }

 

    };

 

    $result .= '</table>';

 

 

    echo $result;

 

 

    mysql_close($dp);

 

 

    if ($countGeocode) {

 

        echo '<div style="margin-top:1em">Всего обработано адресов: '.$countGeocode.'</div>';

 

        if ($countGeocodeFault) {

 

            echo '<div style="color:red">Не удалось прогеокодировать: '.$countGeocodeFault.'</div>';

 

        }

 

    } else {

 

        echo '<div>Таблица с адресами пуста.</div>';

 

    }

 

?>

 

 

<script src="//api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script>

<script type="text/javascript">

    <?php

        echo "var magObjs = ["; 

        foreach ($mags as $key => $value) {

            if ($key!=0) {

                echo ",'".$value->city->name.",".$value->address."'";

            } else {

                echo "'".$value->city->name.",".$value->address."'";

            }

        }

        echo "];";

    ?>

</script>

<script type="text/javascript">

    var CityCoordinats;

    function init(street) {                

        if (street) {

            street = street;

            var res = '';

            var myGeocoder = ymaps.geocode(street);

            myGeocoder.then(

                function (res) {

                    var firstGeoObject = res.geoObjects.get(0);

                    CityCoordinats = firstGeoObject.geometry.getCoordinates();

                    myMap.setCenter(CityCoordinats, 9);

                },

                function (err) {

                }

            );

        }             

        var myMap = new ymaps.Map('map', {

            center: [55.753676, 37.619899],

            zoom: 9,

            controls: ['zoomControl']

        });

        for(var el=0;el<magObjs.length;el++){

 

        }

 

         <?php

            if (count($mags)>0) {

                echo "var objects = ymaps.geoQuery("; 

                foreach ($mags as $key => $value) {

                    if ($key!=0) {

                        echo ".add(ymaps.geocode('г. ".$value->city->name.", ".$value->address. "'))";

                    } else {

                        echo "ymaps.geocode('г. ".$value->city->name.", ".$value->address."'))";

                    }

                }

            } else {

                echo "var objects = false;";     

            }

            

        ?>

        

        if (objects) {

            myMap.geoObjects.add(objects.clusterize());    

        };

 

 

    }

 

ymaps.ready(init);

$(document).ready(function() {

    $('.map_search button').click(function(){

        $('.right_map #map').html('');    

        var street =  $('.map_search input').val(); 

        init(street);

    })

    $('.left_map ul li').click(function(){

        $('.right_map #map').html('');    

        var street =  $(this).text();    

        init(street);

    })

});

 

</script>

<div style="clear:both;border-bottom:2px solid grey;"></div>

3 комментария
Подписаться на комментарии к посту

Не надо печатать из php куски другого языка (javascript) это плохая практика.
Сделайте отдельный обработчик (url) по которому отдавайте из БД JSON-представление своих данных, и запрашивайте их со страницы при помощи AJAX.
Вот пример такого функционала

на вкладке "data.json" можно посмотреть пример передаваемых данных

Я прошу прощения, не знаком с AJAX и как отдать данные JSON, не подскажете подробней как можно это сделать или где можно подробней изучить, как это реализовать.