在PostgreSQL/PostGIS中与group_by common属性合并



我试图将一系列的linestring几何形状与匹配属性(ROAD_NAME_SEREARC和ROAD_ID(相结合,然后从以下示例数据

将Merged linestring返回ROAD_ID属性

http://sqlfiddle.com/#!15/f52d21(请注意 - 如果您将其复制到数据库,则需要将形状列的类型更改为几何(MultinIneString,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

下一个方法,排除非最重要的功能... 选择 max(road_id(, road_name_search, ST_ClusterInterting(形状( 来自A_ROD_TEST ROAD_NAME_SERACH

现在我得到了...

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

感谢您的查看:(

@ewcz

确定的非常简单的答案
SELECT MAX(road_id), 
road_name_search, 
ST_Union(shape) 
FROM a_road_test 
GROUP BY road_name_search

最新更新