PostGis вопросы по запросам к БД

Может просто наименований нет? У первых попавшихся трех. Выведите еще колонку osm_id, посмотрю у себя, у меня local развернут.

Чтобы потом обновления накатывать.

Это нормально, просто сообщение об ошибке сформулировано неудачно. На самом деле таблица, которая не существует – создаётся.
Причём, это поведение описано в документе http://switch2osm.org/serving-tiles/manually-building-a-tile-server-12-04/ , раздел “Importing data into the database”:

Понял, спасибо огромное!

Вопрос - есть вариант sql-запросом рассчитать:

  1. Расстояние между двумя точками
  2. Азимут из точки на какую-то другую точку (извините за каламбур, подвисаю на работе) :slight_smile:

Конечно.

ST_Azimuth — Returns the angle in radians from the horizontal of the vector defined by pointA and pointB

ST_Distance — For geometry type Returns the 2-dimensional cartesian minimum distance (based on spatial ref) between two geometries in projected units. For geography type defaults to return spheroidal minimum distance between two geographies in meters.

Спасибо! :slight_smile:

При расчете дистанции, нужно указывать (как я понял) район, в котором проводятся расчеты, чтобы учесть искривление поверхности Земли. Т.е. вот это:


units in planar degrees 4326 is WGS 84 long lat unit=degrees

где их можно посмотреть?

Чего то я плыву совсем…

Делаю запрос:


SELECT 'point' AS type,ST_X(way) AS lon,ST_Y(way) AS lat,aeroway,name FROM planet_osm_point 
WHERE aeroway IN ('airport','aerodrome')    
UNION
SELECT 'polygon' AS type,ST_X(ST_Centroid(way)) AS lon,ST_Y(ST_Centroid(way)) AS lat,aeroway,name FROM planet_osm_polygon
WHERE aeroway IN ('airport','aerodrome') LIMIT 50;

Получил я координаты:


"polygon";4359829.4534671;5627019.51677918;"aerodrome";"Международный аэропорт Краснодар"

А что мне показывает этот запрос? О_о :open_mouth: :open_mouth: :open_mouth:

Координаты “Международный аэропорт Краснодар” - 45°02′04″ с. ш. 39°09′00″ в. д.

Вот страничка Вики - Аэропорт Краснодар

Мягко говоря, я не понимаю… :slight_smile:

Добрый человек подсказал:

Это EPSG:3857 тебе нужна EPSG:4326.

Таким образом нужно получить данные в EPSG:4326. Ищу пример запроса.

Собственно вместо way надо использовать ST_Transform(way,4326) и получим геометрию в 4326.

Все работает! Спасибо огромное!

Вот такой запрос нужен для получения координат в “правильном” виде. (вдруг кому пригодится) :slight_smile:


SELECT 'point' AS type,ST_X(ST_Transform(way,4326)) AS lon,ST_Y(ST_Transform(way,4326)) AS lat,aeroway,name FROM planet_osm_point 
WHERE aeroway IN ('airport','aerodrome')    
UNION
SELECT 'polygon' AS type,ST_X(ST_Centroid(ST_Transform(way,4326))) AS lon,ST_Y(ST_Centroid(ST_Transform(way,4326))) AS lat,aeroway,name FROM planet_osm_polygon
WHERE aeroway IN ('airport','aerodrome') LIMIT 3;

Мне кажется, более естественно сразу загружать в 4326 (--proj 4326). Оно и запросы проще будут.
select name from planet_osm_polygon where st_dwithin(way, st_transform(setsrid(makepoint(39.0900,45.0204),4326),900913)::geometry,1);
или
select name from planet_osm_polygon where st_dwithin(way, setsrid(makepoint(39.09,45.02),4326)::geometry,1);

Вообще удобнее работать с типом geography, для него всякие там ST_Distance, ST_DWithin, пользуют метры.

ST_Distance(ST_Transform(way,4326)::geography, SetSRID(MakePoint(lon,lat),4326)::geography)

Спасибо. Попробую. :slight_smile:

Только если можно - объясняйте чуть проще, я не специалист вообще, тяжеловато разобраться. :slight_smile: Через пару недель будет проще, а сейчас тяжело еще.

Я попробовал скомпилировать свежий osm2pgsql на Visual Studio.

Пришлось поправлять исходники, pbf поддержать не получилось (кто-нибудь видел живой protobuf-c для Windows?).

Кому интересно, можете потестировать: https://dl.dropboxusercontent.com/u/63393258/osm2pgsql_win_unstable.zip
Исходный код (переписал под cmake): https://github.com/alex85k/osm2pgsql. (нужен VS2013, он более совместим c C99).
(может затребовать runtime: http://www.microsoft.com/ru-ru/download/details.aspx?id=40784)

Может подскажет кто. Почему osm2pgsql может не загрузить точку из данных? Смотрю загрузку osmosis-ом точка есть, osm2pgsql - нет. Соответственно и дорога поличилась обрезана. например node - 2246232221, way - 215216040

64-битные ID в некоторых сборках по умолчанию выключены, особенно если под Windows :frowning:

Кто-нибудь знает рабочую сборку, кроме моей экспериментальной из предыдущего поста?

А там случаем не составная дорога? один и тот же osm_id могут иметь несколько рядов в таблицах

Да нет, обычная дорога. В JOSM немного её обновил, теперь нормально. а было так:

поторопился с нормально :slight_smile:

vs