Расчет длины линейного объекта для нескольких таблиц

Ответить
HasT
Активный участник
Сообщения: 142
Зарегистрирован: 16 окт 2009, 22:08
Репутация: 55
Откуда: Харьков

Расчет длины линейного объекта для нескольких таблиц

Сообщение HasT » 06 сен 2012, 12:01

PostGIS база содержит несколько таблиц ("D1_r", "D2_r"). Необходимо получить результат длины линий как для каждой таблицы так и общий результат длины.
При использовании запроса в SQL window/DB Manager:

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

SELECT sum(ST_Length_Spheroid(the_geom,'SPHEROID["WGS 84",6378137,298.257223563]'))/1000 AS km_roads FROM "D1_r";
для каждой таблицы получаю результат 2267 km (10453 rows in table) и 220 km (834 rows in table) за 0.1 сек.

При запросе (длина для каждой таблицы)

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

SELECT
sum(ST_Length_Spheroid("D1_r".the_geom,'SPHEROID["WGS 84",6378137,298.257223563]'))/1000 AS km_roads1, sum(ST_Length_Spheroid("D2_r".the_geom,'SPHEROID["WGS 84",6378137,298.257223563]'))/1000 AS km_roads2
FROM "D1_r","D2_r";
я получил результат 1891450 km и 2305105 km за 183 сек.

При запросе (длина для таблицы_1 из при запросе из двух таблиц)

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

SELECT sum(ST_Length_Spheroid("D1_r".the_geom,'SPHEROID["WGS 84",6378137,298.257223563]'))/1000 AS km_roads1 FROM "D1_r","D2_r";
я получил результат 1891450 km за 100 сек.

При запросе (суммарная длина для двух таблиц)

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

SELECT
(sum(ST_Length_Spheroid("D1_r".the_geom,'SPHEROID["WGS 84",6378137,298.257223563]'))/1000)+
( sum(ST_Length_Spheroid("D2_r".the_geom,'SPHEROID["WGS 84",6378137,298.257223563]'))/1000) AS total
FROM "D1_r", "D2_r";
получил результат 4196555 km (1891450 km + 2305105 km) за 190 сек.

Правильный результат должен быть 2267 km (10453 rows in table) и 220 km (834 rows in table).

Какой должен быть правильный запрос для получения правильного результата?
Последний раз редактировалось HasT 06 сен 2012, 12:26, всего редактировалось 1 раз.

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: Расчет длины линейного объекта для нескольких таблиц

Сообщение Voltron » 06 сен 2012, 12:18

Пожалуйста, пользуйтесь соответствующими тегами для выделения кода

HasT
Активный участник
Сообщения: 142
Зарегистрирован: 16 окт 2009, 22:08
Репутация: 55
Откуда: Харьков

Re: Расчет длины линейного объекта для нескольких таблиц

Сообщение HasT » 06 сен 2012, 12:26

Voltron писал(а):Пожалуйста, пользуйтесь соответствующими тегами для выделения кода
исправил

sdikiy
Участник
Сообщения: 54
Зарегистрирован: 15 янв 2011, 23:03
Репутация: 1
Откуда: Ukraine

Re: Расчет длины линейного объекта для нескольких таблиц

Сообщение sdikiy » 06 сен 2012, 16:29

ошибка в FROM "D1_r","D2_r"

попробуйте:

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

SELECT
(SELECT sum(ST_Length_Spheroid("D1_r".the_geom,'SPHEROID["WGS 84",6378137,298.257223563]'))/1000 
       FROM "D1_r") AS km_roads1, 
(SELECT sum(ST_Length_Spheroid("D2_r".the_geom,'SPHEROID["WGS 84",6378137,298.257223563]'))/1000
       FROM "D2_r") AS km_roads2,
(SELECT sum(ST_Length_Spheroid("D1_r".the_geom,'SPHEROID["WGS 84",6378137,298.257223563]'))/1000 
       FROM "D1_r") + 
(SELECT sum(ST_Length_Spheroid("D2_r".the_geom,'SPHEROID["WGS 84",6378137,298.257223563]'))/1000
       FROM "D2_r") AS km_total
;
топорно, но должно работать :-)

HasT
Активный участник
Сообщения: 142
Зарегистрирован: 16 окт 2009, 22:08
Репутация: 55
Откуда: Харьков

Re: Расчет длины линейного объекта для нескольких таблиц

Сообщение HasT » 06 сен 2012, 16:43

sdikiy писал(а):ошибка в FROM "D1_r","D2_r"

попробуйте:

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

SELECT
(SELECT sum(ST_Length_Spheroid("D1_r".the_geom,'SPHEROID["WGS 84",6378137,298.257223563]'))/1000 
       FROM "D1_r") AS km_roads1, 
(SELECT sum(ST_Length_Spheroid("D2_r".the_geom,'SPHEROID["WGS 84",6378137,298.257223563]'))/1000
       FROM "D2_r") AS km_roads2,
(SELECT sum(ST_Length_Spheroid("D1_r".the_geom,'SPHEROID["WGS 84",6378137,298.257223563]'))/1000 
       FROM "D1_r") + 
(SELECT sum(ST_Length_Spheroid("D2_r".the_geom,'SPHEROID["WGS 84",6378137,298.257223563]'))/1000
       FROM "D2_r") AS km_total
;
топорно, но должно работать :-)
то, что нужно! Спасибо!

Ответить

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

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

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