объединить строки строк с общим атрибутом group_by в PostgreSQL / Postgis - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь объединить серию геометрий линейных линий с соответствующим атрибутом (road_name_search и road_id), а затем присоединить объединенную линейную строку обратно к атрибуту road_id из следующих образцов данных

http://sqlfiddle.com/#!15/f52d21 (обратите внимание - если вы копируете это в базу данных, вам нужно будет изменить тип столбца формы на геометрию (MultiLineString, 2193)) ... есть ли версия SQL для PostGIS скрипка?)

Я попытался использовать приведенный ниже код, который хорошо подходит для объединения названий дорог:

SELECT 
MAX (road_id),
road_name_search
FROM a_road_test 
GROUP BY road_name_search

Кажется, что это работает, как ожидалось, со следующими результатами:

max         road_name_search
3033986     Kennedy Road (Onekawa)
3033986     Kennedy Road (Greenmeadows)
3033986     Kennedy Road (Marewa)
1808281     Kennedy Road (Pyes Pa)
3033986     Kennedy Road (Pirimai)

Затем я попытался включить геометрические строки, поэтому я получаю все, что мне нужно ... Когда я расширяю запрос, чтобы включить кластеризацию геометрической строки, вот так

SELECT 
MAX (road_id),
road_name_search,
unnest(ST_ClusterIntersecting(shape))
FROM a_road_test 
GROUP BY road_name_search

Затем я получаю дублированные поля road_name_search_fields, то есть более одного вхождения каждого, например.

1808281 Kennedy Road (Pyes Pa)      geoma
3033986 Kennedy Road (Pirimai)      geomb
3033986 Kennedy Road (Pirimai)      geomc
3033986 Kennedy Road (Onekawa)      geomd
3033986 Kennedy Road (Greenmeadows) geome
3033986 Kennedy Road (Greenmeadows) geomf
3033986 Kennedy Road (Marewa)       geomg
3033986 Kennedy Road (Marewa)       geomh

Следующий подход, исключить функцию unnest ... ВЫБРАТЬ MAX (road_id), road_name_search, ST_ClusterIntersecting (форма) ОТ a_road_test GROUP BY road_name_search

Теперь я заканчиваю с ...

1808281 Kennedy Road (Pyes Pa)  [geoma]
3033986 Kennedy Road (Pirimai)  [geomb, geomc]
3033986 Kennedy Road (Onekawa)  [geomd]
3033986 Kennedy Road (Greenmeadows) [geome, geomf]
3033986 Kennedy Road (Marewa)   [geomg, geomh]

Просто не могу понять, как ...

1808281 Kennedy Road (Pyes Pa)      geoma
3033986 Kennedy Road (Pirimai)      geombc
3033986 Kennedy Road (Onekawa)      geomd
3033986 Kennedy Road (Greenmeadows) geomef
3033986 Kennedy Road (Marewa)       geomgh

Спасибо за внимание:)

1 Ответ

0 голосов
/ 21 мая 2018

Очень простой ответ, обозначенный @ ewcz

SELECT MAX(road_id), 
road_name_search, 
ST_Union(shape) 
FROM a_road_test 
GROUP BY road_name_search
...