Клуб API Карт

Получение координат по адресу из БД PostgreSQL

Дробков Александр
18 декабря 2013, 12:02

Прошу прощение за беспокойствою Но сам что-то никак не разберусь...

Есть бд postgres. В ней табица с полем адреса... 

Пытаюсь вывести метки по адресу полученному из запроса...

Скрипт адреса получает, карта не отображается( Где я допустил ошибку? 

  

<?php
$script = '';
$host = 'localhost';
$port = '5432';
$user = 'postgres';
$password = 'postgres';
$dbname = 'vet';
$dbconn=pg_connect("host=$host port=$port user=$user password=$password dbname=$dbname");
$script="var points=[";
$query = 'SELECT uaddr FROM public.corporations_corporation where char_length (uaddr) > 1';
$result = pg_query($query) or die(pg_error());
 while(true){
 if(($row = pg_fetch_array($result))==false){break;};
$script.="'".$row[0]."',";}
$script.="]";
#echo($script);
pg_close();
?>
<head>
<script src="http://api-maps.yandex.ru/1.1/index.xml?key=Здесь ключ" type="text/javascript"></script>
<script type="text/javascript">
<?php echo($script); ?>
YMaps.jQuery(function () {
var map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]);
map.setCenter(new YMaps.GeoPoint(44.46657542, 48.72150768), 10);
var geocoder= new YMaps.Geocoder(points[0]);
map.addOverlay(geocoder);
var i=1;
while(points[i]!=null){
geocoder=null;
geocoder= new YMaps.Geocoder(points[i]);
map.addOverlay(geocoder);
i++;
}
})
</script>
</head>
<body>
<div id="YMapsID" style="width:1024px;height:768px"></div>
</body>
</html>

 

Помогите кто может... я плохо в этом понимаю....

4 комментария

Не надо так геокодировать

Каждое геокодирование это http-запрос, и каждый посетитель вашего сайта их отправляет (одни и те же), лучше прогеококодируйте адреса на вашем сервере один раз и добавьте координаты в свою БД. и создавайте метки по координатам


PS: печатать из одного языка программирования куски другого языка это убогая практика.

 

Дробков Александр
18 декабря 2013, 12:35

Хорошо! Спасибо! Я последую вашему совету.... на основании этого примера получу координаты, а потом как лучше передать? 

В коде меняю 

"$query = 'SELECT uaddr FROM public.corporations_corporation where char_length (uaddr) > 1';

$result = pg_query($query) or die(pg_error()); while(true){ if(($row = pg_fetch_array($result))==false){break;};$script.="'".$row[0]."',";}

$script.="]";"

 

на 

"$query = "SELECT latitude || ', ' || longitude as coord FROM public.corporations_coordinates";

$result = pg_query($query) or die(pg_error());

 while(true){

 if(($row = pg_fetch_array($result))==false){break;};

$script.="".$row[0].", ";}

$script.="]";"

 

Мне главное что бы он заработал... Скрипт результат получает... Но карта вообще не отображается(( Помогите, хоть на этом примере..

Если не сложно пример... Просто я правда не очень в этом смыслю...

Как я уже писал - лучше не выводить напрямую javascript-код из PHP, это плохая практика.

Используйте какой-нибудь промежуточный формат данных JSON или XML

и загружайте в броузер данные в этом формате асинхронно с помощью AJAX.

 

вот пример описания точек в формате JSON, которое можно прямо в таком виде передать в АПИ и он их отрисует на карте

Дробков Александр
18 декабря 2013, 18:12

Решил я этот вопрос)) СПасибо за совет! Правда немного иным способом...