Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Кто работал с PostGIS  (Прочитано 13090 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Hooter
Опытный

ru
Offline Offline
Пол: Мужской

« : 02-03-2006 11:11 » 

Кто-нибудь работал с PostGIS?
Что можете сказать? Какие возможности, производительность и пр..
Записан
Topol
Гость
« Ответ #1 : 19-07-2006 14:29 » 

Работаем, весьмя неплохая система, учитывая ее бесплатность. Улыбаюсь
Вот одина из наши разработок
http://www.ecomm.kiev.ua/gis/news/2006_07_19_PostGIS_from_ArcView.htm
Записан
Hooter
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 21-07-2006 14:14 » 

НУ, тогда сразу вопросы  Улыбаюсь
Вот, например, нам нужно хранить данные об объектах, координаты которых заданы в одной из трех систем координат - СК42, СК95 и WGS84. Прочитал документацию и сделал вывод, что хранить информацию о таких объектах в одной таблиценевозможно. Так ли это?
Записан
AlexRush
Гость
« Ответ #3 : 22-07-2006 09:52 » 

И да, и нет. Теперь подробней.
 В теории (т.е. так, как задумано:) в одном слое лежат данные в одной СК (с одним SRID). При попытке поместить в слой данные в другой  СК система выдает ошибку. Таким образом решить Вашу задачу в лоб нельзя. Но ее можно обойти средствами самой же PostGIS.
 
 Рассмотрим, как описывается и для чего существует информация о СК в PostGIS.
 СК назначается всему слою PostGIS. Что же есть слой? Слой PostGIS - это набор атрибутивных и пространственных данных, идентифицируемый уникальным ключом <Имя_Таблицы><Имя_Поля_Геометрии_В_Этой_Таблице>, о чем наглядно свидетельствует структура geomentry_columns. [4.2.2.]

Таким образом в одной таблице PostgreSQL может присутствовать несколько геометрических столбцов, которые в идеологии PostGIS будут представляться таким же количеством отдельных слоев.

Например:

Таблица PostgreSQL:
TABLE geom_table1
(
  id int4,
  data_column1 varchar,
  .................
  geom_pulkovo geometry,
  geom_wgs geometry,
  geom_utm geometry
);

Записи в geometry_columns:
....., geom_table1, geom_pulkovo,   POLYGON,..., SRID для этого слоя, ........
....., geom_table1, geom_wgs,      POLYGON,..., SRID для этого слоя, ........
....., geom_table1, geom_utm,      POLYGON,..., SRID для этого слоя, ........


Следовательно, каждому такому слою можно назначить свою ск.
НО, напомню, для PostGIS это будут разные слои, что вряд ли подходит для решения Вашей задачи.

 Вспомним, для чего мы вообще указываем информацию о СК. Для того, чтобы была возможность трансформировать геометрические данные к другой СК (например, с целью отображения данных в разных СК в одном виде или просто для конвертации).
  Трансформация данных в PostGIS производится функцией Transform(geometry,integer) [6.2.6].
 
 Итак, способ 2:
 Вспомним, что назначать СК для слоя вовсе не обязательно. Можно задать "пустую" СК (SRID = -1).
 При этом, SRID для КАЖДОЙ геометрии в слое можно назначать в run-time'е при помощи функции SetSRID(geometry) [6.1.1]
 Таким образом для хранения данных в разных СК в одном слое нужно создать таблицу вида:

TABLE geom_table2(
 id int4,
 data_column1 varchar,
 .........
 featute_srid   int4,      -- идентификатор СК для геометрии в каждой записи
 the_geom      geometry   -- поле геометрии   
);
 
и задать ей SRID равный -1.
 
 Функция Transform() при получении данных на прямую из такого слоя не будет нечего трансформировать, так как не знает ИЗ ЧЕГО ей трансформировать. Для выборки данных из такого слоя потребуется специальный запрос:
select .....,
   transform( setSRID(the_geom,featute_srid) ,common_srid)
 from geom_table2

 
 который выберет все данные из слоя, приведя их к ОДНОЙ СК - заданной common_srid.
 
 Ну и все прочие вариации на данную тему.
 -------------------------------
 [ссылки: postgis manual]
 P.S. еще есть такая вещь, как GEOMETRY_COLLECTION [4.1.2] можно с ней  проиграться.
 
 P.P.S. IMHO, следует избегать подхода разных СК в одном слое, ибо не структурно. Найдите такое хоть в одном ArcView?
« Последнее редактирование: 19-12-2007 19:16 от Алексей1153++ » Записан
Hooter
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 24-07-2006 20:26 » 

Итак, способ 2:
...
и задать ей SRID равный -1.

 Функция Transform() при получении данных на прямую из такого слоя не будет нечего трансформировать, так как не знает ИЗ ЧЕГО ей трансформировать. Для выборки данных из такого слоя потребуется специальный запрос:
...

Действительно, это решает проблему Улыбаюсь Спасибо. Когда просто читаешь мануал такой способ не кажется очевидным Улыбаюсь

P.P.S. IMHO, следует избегать подхода разных СК в одном слое, ибо не структурно. Найдите такое хоть в одном ArcView?

Возможно это и неструктурно. Не спорю. Но других вариантов пока в голову не пришло, возможно, потому, что нет опыта в данной области.

У нас задача такая: существует набор однотипных объектов, территориально относящихся к разным государствам. Координаты каждого объекта записаны в той СК, которая официально используется этим государством. Можно хранить все координаты в какой-то одной СК и пересчитывать в другие "на лету", но это не приветствуется, так как в таком случае имеет место погрешность пересчета.

Вот еще такой вопрос: какие единицы измерения используются при задании координат объектов? Метры, градусы или что-то абстрактное? К сожалению для меня, мануал не дал мне полного понимания того, как это все работает Жаль
Записан
AlexRush
Гость
« Ответ #5 : 26-07-2006 09:51 » 

Вот еще такой вопрос: какие единицы измерения используются при задании координат объектов? Метры, градусы или что-то абстрактное?
По большому счету - единицы измерения геометрии - это просто единицы Улыбаюсь
Все зависит от того, какая СК назначена данному слою (ну или объекту, в нашем случае).Именно СК и определяет юниты  - единицы измерения (метры, градусы, доли градуса и пр.).
 НО, (самое главное): финкции типа area(), distance(), intersects() и т.п. работаю с геометрией в обычной декартовой системе координат (как 2d так и 3d), без какой либо привязки к SRID.

Например:
 у Вас есть 2 слоя:
  - СЛОЙ1. Содержит один полигон всей России в WGS (т.е. порядок значений координат - сотня)
  - СЛОЙ2. Содержит один  произвольный участок, скажем, Ростовской губернии Ага в какой-нибудь местной СК (т.е. порядок значений координат - тысяча и больше)
  при этом у них правильно заданы SRID.
  тогда запрос
 
select Contains(СЛОЙ1,СЛОЙ2)

  вернет FALSE
  и только после применения функции Transform()
 
select Contains(СЛОЙ1,  transform(СЛОЙ2, srid_слоя_1) )

 вернет TRUE.

 Так что единицы измерения геометрии - это просто единицы.

У нас задача такая: ....
Для решения такой задачи IMHO как раз подходит  описанный в пред. посте способ. Но если Вам потребуется делать какие-либо геометрические расчеты с участием объектов в разных СК - все равно без трансформации (погрешности) не обойтись.

P.S. Буду рад ответить на все Ваше вопросы // потому что:
P.P.S. Лично мне PostGIS нравится за большую гибкость при достаточном уровне мощи. Это такая толстая проволока, из которй можно изогнуть самые хитренькие прикладные задачи.
Записан
Hooter
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 02-08-2006 03:12 » 

Спасибо за консультацию Улыбаюсь Ответы мне очень сильно помогли.
Записан
AlexRush
Гость
« Ответ #7 : 02-08-2006 08:45 » 

Нема за що Улыбаюсь
См. постскриптумы Улыбаюсь
Записан
AlexRush
Гость
« Ответ #8 : 02-08-2006 08:47 » new

Нема за що Улыбаюсь
см. постскриптумы в пред. посте Улыбаюсь
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines