PostGIS 2.0, устаревшие функции

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

PostGIS 2.0, устаревшие функции

Сообщение Mavka » 02 авг 2011, 01:36

Версия PostGIS 2.0 еще не вышла, но некоторые торопыгины (не будем показывать пальцем, но вообще то это был sim) уже используют его. При переходе к версиям 2.x планируется избавиться от большого числа устаревших функций (более 250 шт.). Эта мера может отразиться на программах, которые не успели обновить механизмы работы с PostGIS, хотя команда разработчиков старается отслеживать популярные программы и к официальному релизу это должно быть учтено.

Конкретный пример: UMN MapServer 5.6.2. При подключении к БД использует конструкции вида

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

encode(AsBinary(force_collection(force_2d("the_geom")),'NDR'),'hex') as geom
устаревшие функции: AsBinary, force_collection, force_2d.

Что бы вернуть функции, нужно воспользоваться файлом legacy.sql. Вот здесь приведен его исходный код, компилированная версия заменяет 'MODULE_PATHNAME' на конкретный путь. Как правило, он такой - '$libdir/postgis-2.0'. Можно запустить как весь файл, так и выбрать только нужные функции. Для UMN MapServer:

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

CREATE OR REPLACE FUNCTION Force_2d(geometry)
RETURNS geometry
AS '$libdir/postgis-2.0', 'LWGEOM_force_2d'
LANGUAGE 'C' IMMUTABLE STRICT;

CREATE OR REPLACE FUNCTION Force_Collection(geometry)
RETURNS geometry
AS '$libdir/postgis-2.0', 'LWGEOM_force_collection'
LANGUAGE 'C' IMMUTABLE STRICT;

CREATE OR REPLACE FUNCTION AsBinary(geometry,text)
RETURNS bytea
AS '$libdir/postgis-2.0','LWGEOM_asBinary'
LANGUAGE 'C' IMMUTABLE STRICT;

В списке рассылки Paul Ramsey предлагает такую конструкцию:

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

CREATE OR REPLACE FUNCTION force_2d(geography)
RETURNS geometry
AS 'select force_2d(geometry($1))'
LANGUAGE 'sql' IMMUTABLE STRICT;
И что характерно - она работает. Но моей фантазии не хватает, что бы понять "Как?" :roll:
лангольеры под окном жрали время ом-ном-ном

Ответить

Вернуться в «PostGIS/PostgreSQL»

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

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