2014-11-13 2 views
-2

Я хочу найти пересечение и разницу в том же запросе, используя PostgreSQL (логика должна быть одинаковой для других баз данных).Как объединить две пространственные функции в одном объединении запроса

Как объединить оба ST_Intersection и ST_Difference в том же запросе и вернуть результат.

Я пробовал:

select 1 as keys,(st_intersection(tale1.the_geom,table2.the_geom)) from table1,table2 
UNION select ,st_difference(table1.the_geom,table2.the_geom) from table1,table2; 

Но возвратил ошибку говоря об ошибке после выбора ^, st_difference (....

+0

Некоторые усилия, похоже, были сделаны с этим вопросом, поэтому я приложил все усилия, чтобы ответить на него, даже подумал, что это часть текущей серии проблем с назначением. –

ответ

1

У вас есть несколько вопросов: у вас есть 2 колонки в первом и выберите только один во 2-м, плюс у вас есть запятая из ST_Difference, где, предположительно, вы хотели поставить 2 или somesome. Вы можете упростить запрос, выбрав geoms из table1 и table2 в запросе With, а затем объединив их , например,

with geoms (geom1, geom2) as 
    (select a.the_geom, b.the_geom from table1 a, table2 b) 
select 1, st_intersection(geom1, geom2) from geoms where st_intersects(geom1, geom2) 
    union 
select 2, st_difference(geom1, geom2) from geoms where st_intersects(geom1, geom2); 

Обратите внимание на дополнения того, где ST_Intersects (geom1, geom2) в обоих запросах - это ограничит пересечение и разницу между этими многоугольниками, которые, по крайней мере, имеют какое-то пересечение, избегая декартового соединения. В идеале вы должны иметь там, где a.id! = B.id тоже, чтобы избежать самопересечения/разницы, но вы получите эту идею, я надеюсь.

Смежные вопросы