Страница 1 из 1

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

Добавлено: 06 сен 2012, 12:01
HasT
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).

Какой должен быть правильный запрос для получения правильного результата?

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

Добавлено: 06 сен 2012, 12:18
Voltron
Пожалуйста, пользуйтесь соответствующими тегами для выделения кода

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

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

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

Добавлено: 06 сен 2012, 16:29
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
;
топорно, но должно работать :-)

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

Добавлено: 06 сен 2012, 16:43
HasT
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
;
топорно, но должно работать :-)
то, что нужно! Спасибо!