Страница 1 из 2

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

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

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

Добавлено: 15 ноя 2010, 17:14
Stud

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

$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. В чем может быть причина?

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

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

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

Добавлено: 15 ноя 2010, 17:29
Mavka
Я работаю с базой 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);
?>

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

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

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

Добавлено: 15 ноя 2010, 21:10
Mavka

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

Добавлено: 15 ноя 2010, 23:31
Stud
Поставил себе QGis, посмотрел таблички. Возник вопрос :)

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

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

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

Добавлено: 16 ноя 2010, 06:27
Denis Rykov
Поле '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;

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

Добавлено: 17 ноя 2010, 12:28
Stud
Спасибо! Помогло.

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 18 ноя 2010, 08:41
Stud
Кто-нибудь пробовал создавать файл осм динамически (например на пхп) и потом подгружать его в openlayers? может кто подскажет как это можно сделать? при этом передать в пхп координаты видимой части карты и уровень карты?

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

Добавлено: 18 ноя 2010, 09:59
Mavka
создавать файл осм
Это как, зачем и почему?

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

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