OpenLayers poi из базы MYSQL

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
dimmer
Новоприбывший
Сообщения: 14
Зарегистрирован: 02 окт 2011, 20:22
Репутация: 0

OpenLayers poi из базы MYSQL

Сообщение dimmer »

Давно хотел научиться загружать пои из базы. Но как всегда не хватает мозгов :D. Нашел у немецких коллег обсуждение этой темы. Тут рабочий пример. В принципе все просто, в векторном слое вместо конкретного файла ссылка на скрипт, который вытаскивает из базы пои в границах экрана (насколько я понимаю).

Код: Выделить всё

var pois = new OpenLayers.Layer.Vector("POIs", {
                    projection: new OpenLayers.Projection("EPSG:4326"),
                    strategies: [new OpenLayers.Strategy.BBOX({resFactor: 1.1})],
                     protocol: new OpenLayers.Protocol.HTTP({
                    url: "dbcsv.php",
                        format: new OpenLayers.Format.Text()
                    })
                });
            map.addLayer(pois);
Вот с этим dbcsv.php у меня и возникли проблемы. Автор использует Postgis, а я пытаюсь что-нибудь сделать с Mysql. Создал в Денвере базу "poi", пользователь "poi", пароль "1", в базе таблицу "convenience", столбцы lat lon title description icon iconSize iconOffset, загрузил точки из файла. В базе все отображается как надо. Дамп базы. Теперь пытаюсь подправить dbcsv.php под свою базу. Спросил у Christian(автора), что нужно заменить, но он мне подробно рассказал про свой пример.
Оригинальный dbcsv.php

Код: Выделить всё

<?php

$bbx = $_GET["bbox"] ; 

$array = explode(",",$bbx);

$ble = $array[0] ;
$bbo = $array[1] ;
$bri = $array[2] ;
$bto = $array[3] ;

include("dbconnect.php");
$ergebnis = mysql_query("SELECT lat, lon, name, amenity, operator, vending FROM pois  
WHERE vending LIKE 'excrement_bags'
AND lat BETWEEN $bbo AND $bto
AND lon BETWEEN $ble AND $bri")
OR die("Error: $abfrage <br>".mysql_error()
);

$header = "point\ttitle\tdescription\ticon\n" ;

echo $header ;

while($row = mysql_fetch_object($ergebnis))
{
$daten = $row->lat.",".$row->lon."\t".$row->name."\t"."amenity=".$row->amenity."<br>vending=".$row->vending."<br>operator=".$row->operator."\t"."http://www.openlayers.org/dev/img/marker.png\n" ;
echo $daten ;
    }

?>
Столбцы у него другие, и он проверяет наличие vending=excrement_bags у точек. Еще мне не совсем понятно, как правильно составить dbconnect.php, чтобы попасть в мою базу и таблицу. Вместо include("dbconnect.php"); я вставил, что нагуглил, но похоже что это не работает. Мой нерабочий dbcsv.php

Код: Выделить всё

<?php

$bbx = $_GET["bbox"] ; 

$array = explode(",",$bbx);

$ble = $array[0] ;
$bbo = $array[1] ;
$bri = $array[2] ;
$bto = $array[3] ;

// include("dbconnect.php");
$con = mysql_connect("localhost","poi","1");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
  
$ergebnis = mysql_query("SELECT lat, lon, title, description, icon, iconSize, iconOffset FROM poi  
AND lat BETWEEN $bbo AND $bto
AND lon BETWEEN $ble AND $bri")
OR die("Error: $abfrage <br>".mysql_error()
);

$header = "lat\tlon\ttitle\tdescription\ticon\ticonSize\ticonOffset\n" ;

echo $header ;

while($row = mysql_fetch_object($ergebnis))
{
$daten = $row->lat."\t".$row->lon."\t".$row->title."\t".$row->description."\t".$row->icon."\t".$row->iconSize."\t".$row->iconOffset"\n";
echo $daten ;
    }

?>
dimmer
Новоприбывший
Сообщения: 14
Зарегистрирован: 02 окт 2011, 20:22
Репутация: 0

Re: OpenLayers poi из базы MYSQL

Сообщение dimmer »

Благодаря хорошим людям с phpforum.ru проблема решена
Рабочий вариант dbcsv.php

Код: Выделить всё

<?php

$bbx = $_GET["bbox"] ; 

$array = explode(",",$bbx);

$ble = $array[0] ;
$bbo = $array[1] ;
$bri = $array[2] ;
$bto = $array[3] ;

$link = mysql_connect('localhost', 'poi', '1');
if (!$link) {
    die('Не удалось соединиться : ' . mysql_error());
}
$db_selected = mysql_select_db('poi', $link);
if (!$db_selected) {
    die ('Не удалось выбрать базу poi: ' . mysql_error());
}
// mysql_query("SET NAMES 'utf8'"); 
 
$ergebnis = mysql_query("SELECT lat, lon, title, description, icon, iconSize, iconOffset FROM convenience
WHERE lat BETWEEN '$bbo' AND '$bto'
AND lon BETWEEN '$ble' AND '$bri'")
OR die("Error: $abfrage <br>".mysql_error()
);

$header = "lat\tlon\ttitle\tdescription\ticon\ticonSize\ticonOffset\n" ;

echo $header ;

while($row = mysql_fetch_object($ergebnis))
{
$daten = $row->lat."\t".$row->lon."\t".$row->title."\t".$row->description."\t".$row->icon."\t".$row->iconSize."\t".$row->iconOffset."\n";
echo $daten ;
    }

?>
Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость