如何在空间上对很多点进行分区?


9

我拥有客户的位置数据,拥有超过1.3亿条记录,分布在全国各地。这是PostGIS中的空间表

我现在想将整个国家划分为“服务区”,这样每个服务区都具有:

  • Atleast 30位客户
  • 最多1000平方公里。

我研究了ArcGIS的Aggregate工具,但由于不符合我的标准,因此:

  • 它没有考虑最小数量
  • 我只有Qgis&Grass可支配。

我可以使用什么工具/过程来实现这一目标?

Answers:


4

我进行了一个小实验:

  • 产生900个随机点
  • 使用最小生成树连接它们
  • 在中间某处捡到水槽

在此处输入图片说明

  • 翻转链接以形成方向图,即每个节点最终都排放到相同的接收器中

在此处输入图片说明

  • 我运行了一个脚本,用于将较小的流域汇总为较大的流域,以期使平均“大小”为30。

结果:

在此处输入图片说明

让我知道是否感兴趣,我可以挖掘脚本(该脚本已经在该网站的某个地方发布了),或者更详细地解释了工作流程。我使用了ArcGIS。

-------------------------------------

** 2017年9月更新

它与上面非常相似,但是使用的是栅格方法,ArcGIS的距离和水文工具。棘手的部分是创建最小生成树并以栅格格式查找“集水区”出口。

这些是我遵循的步骤:

  • 三角剖分节点(指向群集的点),提取三角网络边,将节点转换为WEIGHT栅格:

在此处输入图片说明

  • 计算边缘表中的字段:我使用(ShapeLength ^ 3 / 1e6)。转换为栅格,以很高的值填充空白以创建COST栅格。这鼓励了彼此靠近的点之间的流动。希望流动路径看起来与最小生成树(MST)相似,而不是朝向汇点的直线附近。
  • 选择任何节点(OUTLET / SINK)并使用COST曲面和SINK作为源创建“成本反向链接”栅格。使用转换回链接栅格为体面的“流向”栅格Int(Power(2,"backlink"-1))。使用流向和权重栅格累积流量。可以看到,成本分配的窍门确实产生了类似于MST的东西:

在此处输入图片说明

我决定将点按50进行分组。考虑到网络的分形结构,我在“高流”开始时将极限的入口点设置为稍低一点,即Con(“ FlowAccum”> 45,1)。定义为细胞的入口

存在高流量&焦点统计= 2&单元格不是SINK(“流量方向”上没有数据值)

在此处输入图片说明

使用入口作为倾泻点和流动方向来定义集水区。图片显示了115个集水区:

在此处输入图片说明

他们的统计数据:平均值= 50.33,最小值= 46,最大值= 74。

要获得第二个集水区,足够擦除已经定义的集水区下的WEIGHT栅格,计算流量累积等。

该方法适用于数百万个点,因为它是基于栅格的,对这个点的数量进行三角测量也不是问题。


1
我不知道这是否对我有用,但是看起来很有趣。请发布脚本。
Devdatta Tengshe

我今天或星期一晚些时候发布脚本,请假一天。在此期间,请访问gis.stackexchange.com/questions/179559/…,我在其中描述了其背后的想法
FelixIP

我在一夜之间在100,000点上对其进行了测试。最后一步花了将近6个小时,这使它成为不可能的方法,至少在ArcGIS中是这样。更不用说我必须自己编写MST,因为Patterson的工具I卡住了。
FelixIP '16

您设法解决了吗?看来我确实使用了栅格方法,如果对此感兴趣,可以发布工作流程/
-FelixIP

拜托 我用Bruteforce方法解决了这个问题,对于我的目的来说还可以。但我确信其他人也可以从您的新方法中受益。
Devdatta Tengshe
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.