OpenLayers и БД OSM на GIS-Lab'e

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Stud
Интересующийся
Сообщения: 46
Зарегистрирован: 12 сен 2010, 06:16
Репутация: 0

OpenLayers и БД OSM на GIS-Lab'e

Сообщение Stud » 15 ноя 2010, 12:42

Добрый день.
Возник вопрос. Возможно ли с удаленного сервера обращаться с SQL-запросами в БД ОСМ, расположенную на GIS-Labe? Интересует получение участников определенного типа релейшинов. Т.е. задачи получается такая: Посылка запроса на наличие релейшена с определенными тегами в определенной области, при получении положительного ответа, запрос участников этого релейшина находящихся в заданной области. Если такое возможно, ткните носом на описание таблиц БД и на примерчики извлечения из нее на php.

Stud
Интересующийся
Сообщения: 46
Зарегистрирован: 12 сен 2010, 06:16
Репутация: 0

Re: OpenLayers и БД OSM на GIS-Lab'e

Сообщение Stud » 15 ноя 2010, 17:14

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

$localhost="http://gis-lab.info:5432";
$bdname="osm";
$login="guest";
$passwod="guest";

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

<?php
include ("./inc/adris.inc");

$conn = mysql_connect ($localhost, $login, $passwod)
        or die ("Соединение не установлено!<br>");
   print ("Соединение установлено!<br>");


$bd_list=mysql_list_dbs($conn);
while($row=mysql_fetch_object($bd_list)) {
if ($row->Database=="osm") 
{
  echo ("<br><font color=red>".$row->Database."</font><br>\n");
$t_list=mysql_list_tables($row->Database);
  for($i=0;$i<mysql_num_rows($t_list);$i++) {
    echo " - <b>".mysql_tablename($t_list,$i)."</b><br>\n";

$fields=mysql_list_fields($row->Database, mysql_tablename($t_list,$i), $conn);
$colums=mysql_num_fields($fields); // число полей в таблице
// Далее распечатаем имена всех полей таблицы
for($j=0;$j<$colums;$j++) {
  echo "<i>".mysql_field_name($fields,$j)."</i><BR>";
}}  }  }
mysql_close($conn);
?>
Вот такая конструкция выдает ошибку №500. В чем может быть причина?

yellow-sky
Гуру
Сообщения: 588
Зарегистрирован: 30 мар 2009, 21:53
Репутация: 55
Откуда: Королев

Re: OpenLayers и БД OSM на GIS-Lab'e

Сообщение yellow-sky » 15 ноя 2010, 17:19

На гис-лабе не Mysql, а Postgres, причем с PostGis. Меняйте драйвер для подключения (надеюсь на пхп уже есть такой :) )

Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: OpenLayers и БД OSM на GIS-Lab'e

Сообщение Mavka » 15 ноя 2010, 17:29

Я работаю с базой gis-lab.info. Пример кода:

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

<?php
// подключемся
$conn = pg_connect('host=gis-lab.info dbname=... user=... password=...');
if (!$conn) {
  echo 'An error occured.\n';
  exit;
}
// отправляем sql-запрос
$result = pg_query($conn, 'SELECT name, family FROM ...');
if (!$result) {
  echo 'An error occured.\n';
  exit;
}
// читаем последовательно все строки
while($row = pg_fetch_row($result)) {
    print("name: $row[0], family: $row[1]");
}
// закрываем соединение
pg_close($conn);
?>
лангольеры под окном жрали время ом-ном-ном

Stud
Интересующийся
Сообщения: 46
Зарегистрирован: 12 сен 2010, 06:16
Репутация: 0

Re: OpenLayers и БД OSM на GIS-Lab'e

Сообщение Stud » 15 ноя 2010, 19:28

Mavka писал(а):Я работаю с базой gis-lab.info.
Подскажи, а есть ли аналог mysql_list_dbs() в PostgreSQL? Еще, у тебя есть список таблиц? Или где их можно посмотреть?

Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: OpenLayers и БД OSM на GIS-Lab'e

Сообщение Mavka » 15 ноя 2010, 21:10

лангольеры под окном жрали время ом-ном-ном

Stud
Интересующийся
Сообщения: 46
Зарегистрирован: 12 сен 2010, 06:16
Репутация: 0

Re: OpenLayers и БД OSM на GIS-Lab'e

Сообщение Stud » 15 ноя 2010, 23:31

Поставил себе QGis, посмотрел таблички. Возник вопрос :)

$sql = "SELECT * FROM osm_rels WHERE 'tags' LIKE '%bus%';";

Что не так в запросе? Как правильно записать, чтобы искались строки, в которых в поле tags есть слово bus?

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: OpenLayers и БД OSM на GIS-Lab'e

Сообщение Denis Rykov » 16 ноя 2010, 06:27

Поле 'tags' - массив, поэтому ваш запрос не пройдёт. Я мало работал с массивами, но сходу пришло вот такое решение, попробуйте:

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

SELECT * FROM osm_rels,generate_series(1,100) AS i  WHERE tags[i] LIKE '%bus%';
100 - максимальный размер массива, узнать можно, используя запрос:

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

SELECT max(array_dims(tags)) FROM osm_rels;
Spatial is now, more than ever, just another column- The Geometry Column.

Stud
Интересующийся
Сообщения: 46
Зарегистрирован: 12 сен 2010, 06:16
Репутация: 0

Re: OpenLayers и БД OSM на GIS-Lab'e

Сообщение Stud » 17 ноя 2010, 12:28

Спасибо! Помогло.

Вопрос по БД osm_rels. Данные в эту таблицу попадают только из РФ и страны бывшего СССР. А есть ли подобные таблицы по всему миру? Ну или большей его части :)

gamm
Гуру
Сообщения: 4056
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1054
Ваше звание: программист
Откуда: Казань

Re: OpenLayers и БД OSM на GIS-Lab'e

Сообщение gamm » 17 ноя 2010, 12:59

Stud писал(а):Поставил себе QGis, посмотрел таблички. Возник вопрос :)

$sql = "SELECT * FROM osm_rels WHERE 'tags' LIKE '%bus%';";

Что не так в запросе? Как правильно записать, чтобы искались строки, в которых в поле tags есть слово bus?
а кавычки на 'tags' так в запросе и написаны?

Stud
Интересующийся
Сообщения: 46
Зарегистрирован: 12 сен 2010, 06:16
Репутация: 0

Re: OpenLayers и БД OSM на GIS-Lab'e

Сообщение Stud » 17 ноя 2010, 13:00

Вопрос по БД osm.
Имеется номерочек ноды. http://www.openstreetmap.org/browse/node/302350938
Можно ли узнать в каком регионе находится эта нода через БД?

Stud
Интересующийся
Сообщения: 46
Зарегистрирован: 12 сен 2010, 06:16
Репутация: 0

Re: OpenLayers и БД OSM на GIS-Lab'e

Сообщение Stud » 17 ноя 2010, 13:01

gamm писал(а):
Stud писал(а):Поставил себе QGis, посмотрел таблички. Возник вопрос :)

$sql = "SELECT * FROM osm_rels WHERE 'tags' LIKE '%bus%';";

Что не так в запросе? Как правильно записать, чтобы искались строки, в которых в поле tags есть слово bus?
а кавычки на 'tags' так в запросе и написаны?
Я по всякому пробовал. Дело было именно в том, что tags-массив.

Stud
Интересующийся
Сообщения: 46
Зарегистрирован: 12 сен 2010, 06:16
Репутация: 0

Re: OpenLayers и БД OSM на GIS-Lab'e

Сообщение Stud » 18 ноя 2010, 08:41

Кто-нибудь пробовал создавать файл осм динамически (например на пхп) и потом подгружать его в openlayers? может кто подскажет как это можно сделать? при этом передать в пхп координаты видимой части карты и уровень карты?

Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: OpenLayers и БД OSM на GIS-Lab'e

Сообщение Mavka » 18 ноя 2010, 09:59

создавать файл осм
Это как, зачем и почему?
лангольеры под окном жрали время ом-ном-ном

Stud
Интересующийся
Сообщения: 46
Зарегистрирован: 12 сен 2010, 06:16
Репутация: 0

Re: OpenLayers и БД OSM на GIS-Lab'e

Сообщение Stud » 18 ноя 2010, 13:13

Mavka писал(а):
создавать файл осм
Это как, зачем и почему?
Хочу сделать отображение маршрутов общественного транспорта.
Делать это при помощи допустем одного ОСМфайла тяжко, уж больно много весит.
Делать при помощи зарание орендинной карты(как на latlon.ru) тоже не хочется, т.к. опять все упирается в место.
Да и первые два варианта неинтересны (хотя если кто поможет и объяснит со вторым, буду благодарен). Вот по этому и хочу сделать динамический ОСМ-файлик.

Ответить

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

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

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