автоматический расчет площадей полигонов средствами PostGIS
-
- Интересующийся
- Сообщения: 31
- Зарегистрирован: 18 июл 2017, 12:26
- Репутация: 0
Re: автоматический расчет площадей полигонов средствами Post
А как создать функцию по определению зоны МСК, использующую признак пересечения центроида с одним из трех полигонов таблицы msk69zones(область, порезанная на зоны по пкк), чтобы функция возвращала srid 98691/98692/98693(определенные в spatial_ref_sys)?
-
- Гуру
- Сообщения: 5298
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: автоматический расчет площадей полигонов средствами Post
а граница между зонами - не прямая линия?
-
- Интересующийся
- Сообщения: 31
- Зарегистрирован: 18 июл 2017, 12:26
- Репутация: 0
Re: автоматический расчет площадей полигонов средствами Post
Нет, вроде как-то так...
Или это просто для упрощения, чтоб в одном районе - одна СК была так принято, а на самом деле там просто трехградусные зоны?
Или это просто для упрощения, чтоб в одном районе - одна СК была так принято, а на самом деле там просто трехградусные зоны?
- Вложения
-
- msk69.JPG (42.73 КБ) 10521 просмотр
-
- Гуру
- Сообщения: 5298
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
-
- Интересующийся
- Сообщения: 31
- Зарегистрирован: 18 июл 2017, 12:26
- Репутация: 0
Re: автоматический расчет площадей полигонов средствами Post
Пока создал аналогичную вышеописанной функцию по определению зоны МСК, опирающуюся на значение долготы границы между зонами.
Заодно сравнил отклонения между площадями имеющихся 528 полигонов в UTM и МСК:
ср = 0,061%
мин = 0,002%
макс = 0,122%
Со значениями карт(планов) пока не сравнивал, но на вид похоже, по крайней мере 3200 га стал 3200 га, а в UTM он 3197 га получался.
ST_Contains не осилил. Насколько понимаю, мне нужно на выводе получить значение поля zone(=srid) из таблицы msk_zones(id,geom,zone), строки для которой соблюдается условие:
Но как в запросе указать геометрию объекта и геометрию зоны из таблицы msk_zones я так и не понял, в примерах все какие-то GeomAsText... а мне то конкретный полигон нужен, который в базе есть.
Код: Выделить всё
-- Function: msk69zone(geometry)
-- DROP FUNCTION msk69zone(geometry);
-- Usage: SELECT ST_Transform(the_geom, msk69zone(ST_Centroid(the_geom)) ) FROM sometable;
CREATE OR REPLACE FUNCTION msk69zone(geometry)
RETURNS integer AS
$BODY$
DECLARE
geomgeog geometry;
zone int;
pref int;
BEGIN
geomgeog:= ST_Transform($1,4326);
pref:=98690;
IF (ST_X(geomgeog))<33.983333 THEN
zone:=1;
ELSIF (ST_X(geomgeog))<36.983333 THEN
zone:=2;
ELSE
zone:=3;
END IF;
RETURN zone+pref;
END;
$BODY$ LANGUAGE 'plpgsql' IMMUTABLE
COST 100;
ср = 0,061%
мин = 0,002%
макс = 0,122%
Со значениями карт(планов) пока не сравнивал, но на вид похоже, по крайней мере 3200 га стал 3200 га, а в UTM он 3197 га получался.
ST_Contains не осилил. Насколько понимаю, мне нужно на выводе получить значение поля zone(=srid) из таблицы msk_zones(id,geom,zone), строки для которой соблюдается условие:
Код: Выделить всё
ST_Contains([геометрия объекта],[геометрия зоны из таблицы msk_zones])=t
-
- Гуру
- Сообщения: 1195
- Зарегистрирован: 23 апр 2011, 10:32
- Репутация: 205
- Откуда: Ульяновск
Re: автоматический расчет площадей полигонов средствами Post
Что-то типа:
Код: Выделить всё
SELECT zone FROM msk_zones, table_areas WHERE ST_Contains(msk_zones.geom, ST_Centroid(table_areas.geom))
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей