我在postgis中使用SRID 27700的以下层:



这是英国的每个行政区域,并且(从颜色分组中可以看到)有一个文本字段指定他们所在的郡。颜色多边形将由包含所有该颜色的所有多边形的单个外环形成一个大多边形,例如所有紫色,棕色,粉红色,灰色等都应该形成一个多边形。

我已经尝试了以下方法:

insert into parishesmerged (geometry)
select astext(multi(ST_Union(the_geom))) as the_geom from parishes
group by county_name


但是它会不断生成破碎的几何图形,因此我在进一步处理时遇到了很大的麻烦。一个更简单的县级地图,其中有主要输出区域。

任何解决方案都不必在Postgis中,我已经安装了完整的OS4Geo堆栈,最新版本的QGis和比我更多的utils会动摇

我唯一没有的就是像ArcGis这样的大男孩(尽管我可能在某处有一个旧的Mapinfo)。作为记录,我要创建的数据集是与我正在编写的GIS书籍一起提供的,该书籍针对希望使用.NET编写GIS应用程序的.NET程序员。在下面的建议中,效果最好的是“ Paul Ramseys”解决方案。

我现在有一个很好的简化县和自治区文件,对于我的书来说足够简单,但又足够复杂,足以让我展示一些有趣的地理空间SQL。尽管Paul的解决方案最终是对我有用的解决方案,但是我还借鉴了其他答案,例如简化了多边形图并进一步降低了复杂性。

在执行此操作时,我确实观察到了一点,尽管ST_Collect确实比ST_Union快,但运行还是它是造成几何形状损坏的主要原因。我的猜测是,速度的提高是以牺牲核心功能的准确性为代价的。

评论

此过程称为“溶解”。我对PostGIS没有经验,但是我相信您可以使用ST_Union命令来执行溶解。

嗨,dmahr,感谢您的澄清,不知道它叫什么,但是,如果您阅读我的问题,您会发现我已经尝试过了:-)
糟糕,抱歉...没有看到。您是否尝试了没有astext(multi())部分的select语句?我只是从其他PostGIS解散示例中看到的内容。

尚未,请立即尝试。 Tks。您是否有解散示例的链接?

如果您不想要“单个外圈”,请编辑快递。 (请参阅我的答案)

#1 楼

ST_Union可以运行,但是几乎可以肯定您的线路工作不干净。因此,您的小物件的边界并非都完美无缺。您可以将它们轻轻地对齐到网格以尝试增加顶点排列的几率,但是我敢打赌,您仍然会遇到一些不起作用的情况。要么它们超出了公差范围,要么更有可能的是,顶点不成对存在,因此一侧有一条线,而另一侧有一个顶点。


如果您拥有PostGIS 2.0,那么如果运气好的话,构建具有公差的拓扑结构可以使您获得所需的答案。

评论


有很好的几何校正线索,但是关于“ ...来自单个外圈的一个大多边形包含所有多边形...”?

– Peter Krauss
2012年8月22日下午16:58

我不知道'SnapTo',我会尝试一下:-) Tks。不幸的是,虽然还没有使用PG 2,但是升级仍在进行中。

–美
2012年8月22日19:02

不确定语法是否正确。根据postgis.net/docs/ST_Union.html,没有签名在第二个参数中接受数字。

–阿伦·坎布雷(Aren Cambre)
13年5月11日下午3:21

您是对的,括号放在错误的位置。编辑。

– Paul Ramsey
13年5月11日在21:53

是否有一个MySQL等效于此?我对本地函数“ ST_Union”的调用中不断收到错误的参数计数,我不知道这是否是mysql的限制。

–贾恩
16-10-21在6:25



#2 楼

ST_Collect函数是PostgreSQL术语中的“聚合”函数

SELECT ST_Collect(GEOM) FROM GEOMTABLE GROUP BY ATTRCOLUMN”将为ATTRCOLUM的每个不同值返回一个单独的GEOMETRYCOLLECTION。 /docs/ST_Collect.html

注意:
ST_Collect比ST_Union
要快得多

评论


我尝试了一下,但结果略有不同,但是我需要几何集合吗?我本质上是在尝试制作一个大的多边形,可以选择在其上有孔(特别是在德比郡和诺丁汉郡,德比和诺丁汉都在中心形成单独的区域。不过,我确实观察到了速度差异,因此产生了扭曲。

–美
2012年8月21日在22:11

#3 楼

您说需要“ ...从包含所有多边形的单个外圈中形成一个大多边形...”。 ST_ExteriorRing可以执行此操作,

 SELECT ST_MakePolygon(ST_ExteriorRing(ST_Union(GEOM)))
FROM GEOMTABLE GROUP BY ATTRCOLUMN
 

SELECT ST_MakePolygon(ST_ExteriorRing(ST_union(ST_Simplify(GEOM,0.5)))) FROM GEOMTABLE GROUP BY ATTRCOLUMN

并检查您的几何形状,

 SELECT * FROM (
   SELECT gid, ST_IsValid(geom) as valid, ST_IsSimple(geom) as simple 
   FROM GEOMTABLE) AS t  
WHERE NOT(valid AND simple); 
 


评论


抱歉,我的描述是由较小的多边形创建的一个较大的多边形,我意识到根据上下文的不同,“外环”对不同的人可能意味着不同的意思,我的目的是描述一个由多边形创建的单个多边形。每个多边形组周围存在边界。

–美
2012年8月22日19:01

#4 楼

根据您的问题,我假设您正在使用军械测量公司的边界线产品。如果是这种情况,则它已经包含县级数据集,因此无需尝试从较低级别的教区自己生成该数据集。建议您这样做,因为在OS OpenData许可下它是免费的,并且具有County级作为形状文件,可以直接加载到PostGIS中。

评论


为不认识的人提供链接怎么样?谢谢。

– jonatr
2012年8月22日,下午5:02

嗨,CHEnderson,您实际上是正确的,是的,我使用的是OS Opendata的边界层数据集,不幸的是,县域边界不完整,实际的县域形状文件仅包括那些被命名为县的图形,伦敦自治市镇包含周围伦敦和其他文件都包含一些部分,比其他部分更低或更低。唯一包含整个英国轮廓的文件,以及随后在一层中提取所有上级县和市政边界的任何机会是教区,因此,我尝试这样做。

–美
2012年8月22日18:52

对于那些有兴趣的人,您可以在这里下载县界以及更多内容:ordnancesurvey.co.uk/oswebsite/products/os-opendata.html

–美
2012年8月22日18:53



对于那些正在寻找链接的人,以上链接不再有效,这是当前的开放数据链接:ordnancesurvey.co.uk/opendatadownload/products.html

–美
19年11月26日在23:15