Помогите с запросом (Postgis)
-
- Интересующийся
- Сообщения: 16
- Зарегистрирован: 07 апр 2009, 16:58
- Репутация: 0
Помогите с запросом (Postgis)
Есть запрос
select ST_Distance( geomfromtext('POINT(40.19992 43.6737)', 26986), geomfromtext('POINT(40.20211 43.67327)', 26986))
То есть находится дистаниця между точками по их координатам, а как сделать, чтобы не по координатам, а по названию там или id находилась ? Нашёл вот такого вида запросик, может посмотрев на него поймёте чего я хочу) правда он не работает(
SELECT ST_Distance(a.location, b.location)
FROM points_tbl a, points_tbl b
WHERE a.id = 1000 AND b.id = 3029;
И ещё, какой запрос выведет мне координаты точки, если я укажу её название или id ?
select ST_Distance( geomfromtext('POINT(40.19992 43.6737)', 26986), geomfromtext('POINT(40.20211 43.67327)', 26986))
То есть находится дистаниця между точками по их координатам, а как сделать, чтобы не по координатам, а по названию там или id находилась ? Нашёл вот такого вида запросик, может посмотрев на него поймёте чего я хочу) правда он не работает(
SELECT ST_Distance(a.location, b.location)
FROM points_tbl a, points_tbl b
WHERE a.id = 1000 AND b.id = 3029;
И ещё, какой запрос выведет мне координаты точки, если я укажу её название или id ?
-
- Гуру
- Сообщения: 810
- Зарегистрирован: 22 авг 2007, 14:58
- Репутация: 123
- Откуда: Казань
Re: Помогите с запросом (Postgis)
Странно, почему не работает?.. Специально ввел для проверки запрос:Vavik писал(а): Нашёл вот такого вида запросик, может посмотрев на него поймёте чего я хочу) правда он не работает(
SELECT ST_Distance(a.location, b.location)
FROM points_tbl a, points_tbl b
WHERE a.id = 1000 AND b.id = 3029;
Код: Выделить всё
SELECT ST_DISTANCE(a.the_geom,b.the_geom) FROM city a, city b WHERE a.city_id=333 AND b.city_id=3444;
Так:ещё, какой запрос выведет мне координаты точки, если я укажу её название или id ?
Код: Выделить всё
SELECT ST_X(the_geom),ST_Y(the_geom) FROM city WHERE city_id=333;
Код: Выделить всё
SELECT AsText(the_geom) FROM city WHERE city_id=333;
-
- Интересующийся
- Сообщения: 16
- Зарегистрирован: 07 апр 2009, 16:58
- Репутация: 0
Re: Помогите с запросом (Postgis)
Спасибо, всё работает:) Правда у меня расстояния неизвестно в чём указываются. Получил вот такое число 0,01887057232, а реальное расстояние около 1.75-1.95 км. В каких велечинах я получил результат ?) SRID 26986, ранее был 4326, но ничего не изменилось.
Ещё нужен запрос, который выдавал все точки, находящиеся в радиусе другой. Делаю так
слово "mod" присутствует в нескольких точках, то есть мне надо, чтобы был результат с такими точками попавшими в радиус, а он мне выводит, все которые только есть.
Нашёл ещё такой запрос,который должен это делать
Но не пойму что такое geocolumn ?
Ещё нужен запрос, который выдавал все точки, находящиеся в радиусе другой. Делаю так
Код: Выделить всё
SELECT b.name,st_dwithin(a.the_geom,b.the_geom, 1000) from table_p a, table_p b
WHERE a.name~'point' AND b.name~'mod point'
Нашёл ещё такой запрос,который должен это делать
Код: Выделить всё
SELECT * FROM geotable
WHERE ST_DWithin(geocolumn, 'POINT(1000 1000)', 100.0);
-
- Гуру
- Сообщения: 810
- Зарегистрирован: 22 авг 2007, 14:58
- Репутация: 123
- Откуда: Казань
Re: Помогите с запросом (Postgis)
Не видя данные, и не зная, откуда они взялись, как вы их положили в PostGIS, сложно что-то сказать... Но очень подозрительно то, что раньше SRID был 4326, а теперь 26986, но результат не изменился (поскольку у первой системы единицы измерения градусы, а у второй - метры). Вы как данные трансформировали из одной системы в другую?Vavik писал(а):Спасибо, всё работает:) Правда у меня расстояния неизвестно в чём указываются. Получил вот такое число 0,01887057232, а реальное расстояние около 1.75-1.95 км. В каких велечинах я получил результат ?) SRID 26986, ранее был 4326, но ничего не изменилось.
Честно сказать, я не понял, что нужно сделать...Ещё нужен запрос, который выдавал все точки, находящиеся в радиусе другой. Делаю такслово "mod" присутствует в нескольких точках, то есть мне надо, чтобы был результат с такими точками попавшими в радиус, а он мне выводит, все которые только есть.Код: Выделить всё
SELECT b.name,st_dwithin(a.the_geom,b.the_geom, 1000) from table_p a, table_p b WHERE a.name~'point' AND b.name~'mod point'
А вот этот пример понятен, здесь geocolumn - название поля, в котором хранится геометрия.Нашёл ещё такой запрос,который должен это делатьНо не пойму что такое geocolumn ?Код: Выделить всё
SELECT * FROM geotable WHERE ST_DWithin(geocolumn, 'POINT(1000 1000)', 100.0);
-
- Интересующийся
- Сообщения: 16
- Зарегистрирован: 07 апр 2009, 16:58
- Репутация: 0
Re: Помогите с запросом (Postgis)
Вот так я импортировал данные в PostgisKolesovDmitry писал(а): Не видя данные, и не зная, откуда они взялись, как вы их положили в PostGIS, сложно что-то сказать... Но очень подозрительно то, что раньше SRID был 4326, а теперь 26986, но результат не изменился (поскольку у первой системы единицы измерения градусы, а у второй - метры). Вы как данные трансформировали из одной системы в другую?
shp2pgsql -i -D -s 4326 PolyanaKrasnaya_A.shp PolyanaKrasnaya_A > PolyanaKrasnaya_A.sql
psql -U postgres -f PolyanaKrasnaya_A.sql -d PolyanaKrasnaya(map)
Тут мне не понравились результаты запросов с непонятными цифрами, полазил на одном форуме, там советывали перевести SRID на 26986. Ну я по новой загнал Данные только поменяв SRID, а толку 0.
shp2pgsql -i -D -s 26986 PolyanaKrasnaya_A.shp PolyanaKrasnaya_A > PolyanaKrasnaya_A.sql
psql -U postgres -f PolyanaKrasnaya_A.sql -d PolyanaKrasnaya(map)
Вообщем есть такая функцияKolesovDmitry писал(а): Честно сказать, я не понял, что нужно сделать...
ST_DWithin(geometry, geometry, float)
Которая возвращает истину, если геометрии находятся в пределах указанного расстояния одна от другой.
У меня же имеются точки - точки tip1 точки tip2 и tip3. Я хочу в результате получить, например точки tip1 попадающие в радиус отдельно взятой точки. Только, мне нужно, чтобы выводились название этих точек, а не лишь логическое значение, то что они попадают в радиус.
Я сделал такой запрос
Код: Выделить всё
SELECT b.name,st_dwithin(a.the_geom,b.the_geom, 1000) from table_p a, table_p b
WHERE a.name~'point' AND b.name~'tip1 point'
-
- Гуру
- Сообщения: 810
- Зарегистрирован: 22 авг 2007, 14:58
- Репутация: 123
- Откуда: Казань
Re: Помогите с запросом (Postgis)
Так не годится. Для начала вам нужно узнать, в какой системе координат/проекции хранятся ваши данные в shp-файле, а потом уже импортировать данные в PostGIS, как хранящиеся именно в этой системе. (Илюстрирующий пример того, что у вас выходит сечас. Предположим, вы создали чертеж стула, при этом все длины указали в сантиметрах. После этого вы отдали чертеж столяру, утверждая, что меряли все дюймовой линейкой Поэтому не нужно удивляться при получении заказа, что на стуле сидеть как-то неудобно... )Vavik писал(а): Вот так я импортировал данные в Postgis
shp2pgsql -i -D -s 4326 PolyanaKrasnaya_A.shp PolyanaKrasnaya_A > PolyanaKrasnaya_A.sql
psql -U postgres -f PolyanaKrasnaya_A.sql -d PolyanaKrasnaya(map)
Тут мне не понравились результаты запросов с непонятными цифрами, полазил на одном форуме, там советывали перевести SRID на 26986. Ну я по новой загнал Данные только поменяв SRID, а толку 0.
shp2pgsql -i -D -s 26986 PolyanaKrasnaya_A.shp PolyanaKrasnaya_A > PolyanaKrasnaya_A.sql
psql -U postgres -f PolyanaKrasnaya_A.sql -d PolyanaKrasnaya(map)
Так ведь тогда нужно сделать что-то вроде:Вообщем есть такая функция
ST_DWithin(geometry, geometry, float)
Которая возвращает истину, если геометрии находятся в пределах указанного расстояния одна от другой.
У меня же имеются точки - точки tip1 точки tip2 и tip3. Я хочу в результате получить, например точки tip1 попадающие в радиус отдельно взятой точки. Только, мне нужно, чтобы выводились название этих точек, а не лишь логическое значение, то что они попадают в радиус.
Я сделал такой запросНо он мне выводит все точки tip1, которые имеются, в не зависимости, попадают они в радиус или нет.Код: Выделить всё
SELECT b.name,st_dwithin(a.the_geom,b.the_geom, 1000) from table_p a, table_p b WHERE a.name~'point' AND b.name~'tip1 point'
Код: Выделить всё
SELECT b.name,a.name FROM table_p a, table_p b WHERE ST_DWithin(a.geometry, b.geometry, 1000) AND b.name='чему он там равняется'
-
- Интересующийся
- Сообщения: 16
- Зарегистрирован: 07 апр 2009, 16:58
- Репутация: 0
Re: Помогите с запросом (Postgis)
Вроде SRID 4326, а как его поменять на 26986 ?
-
- Гуру
- Сообщения: 810
- Зарегистрирован: 22 авг 2007, 14:58
- Репутация: 123
- Откуда: Казань
Re: Помогите с запросом (Postgis)
Тогда есть два пути:Vavik писал(а):Вроде SRID 4326, а как его поменять на 26986 ?
- 1) преобразовать ваш shp перед экспортом в SQL. Это можно сделать, например, при помощи утилиты ogr2ogr или любым другим способом.
2) экспрортировать shp в PostGIS со SRID 4326, а потом уже в PostGIS (его средствами) преобразовать в требуемую систему. Для этого воспользуйтесь функцией ST_TRANSFORM (функция очень простая, подробности об использовании смотрите в документации).
-
- Новоприбывший
- Сообщения: 11
- Зарегистрирован: 03 мар 2009, 20:35
- Репутация: 0
Re: Помогите с запросом (Postgis)
Помогите пишу запрос в Postgis - е
shp2pgsql -i -D -s 4326 wayline.shp wayline > wayline.sql
Выдает такую ошибку:
ERROR: ошибка синтаксиса в или рядом "shp2pgsql"
СТРОКА 1:shp2pgsql -i -D -s 4326 wayline.shp wayline > wayline.sql
^
********** Ошибка **********
ERROR: ошибка синтаксиса в или рядом "shp2pgsql"
SQL state: 42601
Характеристика:1
Что делать???
shp2pgsql -i -D -s 4326 wayline.shp wayline > wayline.sql
Выдает такую ошибку:
ERROR: ошибка синтаксиса в или рядом "shp2pgsql"
СТРОКА 1:shp2pgsql -i -D -s 4326 wayline.shp wayline > wayline.sql
^
********** Ошибка **********
ERROR: ошибка синтаксиса в или рядом "shp2pgsql"
SQL state: 42601
Характеристика:1
Что делать???
-
- Интересующийся
- Сообщения: 16
- Зарегистрирован: 07 апр 2009, 16:58
- Репутация: 0
Re: Помогите с запросом (Postgis)
Это надо не через запрос делать, а в командной строке и ещё в этом "запросе" может чего-то не хватать, в результате он не сработает.ProFF писал(а):Помогите пишу запрос в Postgis - е
shp2pgsql -i -D -s 4326 wayline.shp wayline > wayline.sql
Выдает такую ошибку:
ERROR: ошибка синтаксиса в или рядом "shp2pgsql"
СТРОКА 1:shp2pgsql -i -D -s 4326 wayline.shp wayline > wayline.sql
^
********** Ошибка **********
ERROR: ошибка синтаксиса в или рядом "shp2pgsql"
SQL state: 42601
Характеристика:1
Что делать???
Этот путь мне больше нарвится) правда не могу эту утилиту поставить. Вообще я не пойму, как её или например ptoj, geos без инсталятора ставить)) Вот Тут вроде написано, как, а чёт у меня не получается всё равно...KolesovDmitry писал(а): Тогда есть два пути:
1) преобразовать ваш shp перед экспортом в SQL. Это можно сделать, например, при помощи утилиты ogr2ogr или любым другим способом.
...
-
- Новоприбывший
- Сообщения: 11
- Зарегистрирован: 03 мар 2009, 20:35
- Репутация: 0
Re: Помогите с запросом (Postgis)
Этот путь мне больше нарвится) правда не могу эту утилиту поставить. Вообще я не пойму, как её или например ptoj, geos без инсталятора ставить)) Вот Тут вроде написано, как, а чёт у меня не получается всё равно... [/quote]KolesovDmitry писал(а): Тогда есть два пути:
1) преобразовать ваш shp перед экспортом в SQL. Это можно сделать, например, при помощи утилиты ogr2ogr или любым другим способом.
...
Спосибо Все работает, нашел в чем ошибся.
-
- Новоприбывший
- Сообщения: 11
- Зарегистрирован: 03 мар 2009, 20:35
- Репутация: 0
Re: Помогите с запросом (Postgis)
Подскажите как изменить кодировку у базы с win1251 на UTF8
-
- Интересующийся
- Сообщения: 16
- Зарегистрирован: 07 апр 2009, 16:58
- Репутация: 0
Re: Помогите с запросом (Postgis)
Кажись никак. Можно сделать копию базы, потом создать новую в нужной кодировке и восстановить туда сохранённую бд) А вообще, чтто меняет кодировка ? а то я не знаю для чего она))ProFF писал(а):Подскажите как изменить кодировку у базы с win1251 на UTF8
-
- Новоприбывший
- Сообщения: 11
- Зарегистрирован: 03 мар 2009, 20:35
- Репутация: 0
Re: Помогите с запросом (Postgis)
Повидемому что то меняет так как слой WayLine был создан в кодировке win1251 при перегоне в шейп фойл была выстовлена кодировка UTF-8, после чего он стал уже в загруженном виде в PostgresSQL отображать место подписей, кракозябры. Провел эксперемент оказалась насамом деле от кодировки зависет.Vavik писал(а):Кажись никак. Можно сделать копию базы, потом создать новую в нужной кодировке и восстановить туда сохранённую бд) А вообще, чтто меняет кодировка ? а то я не знаю для чего она))ProFF писал(а):Подскажите как изменить кодировку у базы с win1251 на UTF8
UTF-8 хороша вообще тем что используется везде. Если кодировка win1251 в большенстве случаев не поддерживается на серверах Linux, Unix - товот UTF -8 наоборот поддержиается.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 21 гость