模拟面要素的扩展


13

我有一个我希望成为一个有趣的问题。我正在为GIS课程简介做作业,该课程使用一些墨西哥湾漏油数据介绍常见的基于向量的空间分析方法(缓冲区,叠加层等)。我有一个多边形要素类,其中包含某一天发生的“深水地平线”漏油事件,我正在用缓冲液模拟它的膨胀。

它确实可以说明这个概念,但是肯定不能提供现实的结果。这让我开始思考如何以一种不太均匀的结果来实现此目的,模仿/伪造电流在油膨胀时将油流向各个方向的效果。

从一般意义上讲,我正在寻找一种工作流程,只要输入多边形要素可以完成以下工作:

  • 创建一个新的多边形要素,该要素比原始要素大指定范围(例如10平方公里)或指定因子(例如5%)
  • 新的多边形要素将具有任意形状,但需要注意的是...
  • 新的多边形要素将包含原始的多边形要素(这不是交易突破点,但是很高兴拥有)

任何现实世界的解决方案都必须涉及对洋流,流体动力学等进行建模,而这远远超出了我正在尝试做的事情(尽管包含这种解决方案当然是受欢迎的,并且很有趣),但是这个主意激起了我对潜在的空间问题的好奇心,我很好奇那里有什么解决方案。我想到了一个解决方案,但我想听听其他人可能提供的解决方案。

我在ESRI领域工作,但是当然欢迎使用涉及其他软件包/平台的解决方案(尽管我可能无法对其进行测试)。通用算法,伪代码和代码也可以。


2
有很多有趣且创新的解决方案,但我担心这样一个隐含前提是,这种做法与漏油有任何关系。凝视肚脐的哲学家所获得的科学信息数量不多。当然,在周围分布多边形很有趣-我记得曾听过一位ESRI代表描述'96年代用ArcView 2进行火灾模拟时这样做的过程-但是您如何证明说这个过程只是武断却可能会引起误解?
ub

1
@whuber-我不是说结果会是任意的。我一直在积极地寻求一个任意结果。您说对了,结果与现实世界毫无二致。这就是我为什么对这个问题加标题的部分原因(而不是“模拟漏油事件的扩大”)。我对计算几何/ GIS方法论方面感兴趣,而不是对它在任何特定领域中的应用感兴趣。漏油部分仅仅是考虑一个有趣的空间问题的动力。我将尝试在问题中予以澄清。
詹姆斯M 2010年

忘了提:作业中有一个问题,要求学生思考为什么如果要反映现实,以这种方式使用缓冲工具是一个不好的选择。因此,如果有人担心我试图以现实主义的方式
James M 2010年

谢谢。我担心,有印象的学生在看到一个很酷的图形显示多边形扩展以及一些“漏油”现象时,可能会不加批判地接受前者作为后者的现实表示。
ub

Answers:


7

哈罗

我认为在PostGIS中这样做有点有趣。我认为可以扩展此扩展,以便扩展遵循代表当前的某些线串。但是现在它只是向一个方向扩展。

迭代50次,每次迭代都从上一次迭代中取出多边形,将其移动,缓冲(简化后使其变得更闷)并与凸包合并。我以为凸包比联合起来给出了更好的结果。

因此,结果是50个多边形越来越大。每个较大的多边形都会完全重叠所有较小的多边形。

要查看结果,可以在http://postgisonline.org/map.php上尝试一下

只需复制下面的sql代码,然后单击“ map1”

使用递归t(the_geom,n)AS(SELECT'POLYGON((10 10,8 13,10 15,12 14,15 15,16 12,15 10,10 10))':geometry AS the_geom,1 as n UNION ALL SELECT ST_Convexhull(ST_Collect(ST_Simplify(ST_Buffer(ST_Transscale(the_geom,1.3,2.7,1,1),1),0.1),the_geom)),n + 1 as n FROM t WHERE n <50)从t选择the_geom ;

如果您只想查看第30次迭代中的多边形,则可以 在t和分号之间最后添加
限制1的偏移量30

生成这50个多边形大约需要50毫秒,因此应该可以扩展模型而无需等待太多时间。

问候尼克拉斯

我认为这甚至更好:

使用递归的t(the_geom,n)AS(SELECT'POLYGON((10 10,8 13,10 15,12 14,15 15,16 12,15 10,10 10))':geometry AS the_geom,1 as n UNION ALL SELECT st_convexhull(ST_collect(ST_Simplify(ST_Buffer(ST_Transscale(the_geom,1.1 * n,15,1,1),0.2 * n),0.1),the_geom)),n + 1 as n from t WHERE n <50)从t选择the_geom

模拟扩展向右转


这是一个很好的解决方案,但又提醒我,我需要花时间开始在空间数据库环境中学习GIS。这是一个为什么这样的网站行之有效的好例子。我不仅找到了与我的想法完全不同的解决方案,而且还找到了新的资源作为奖励。
James M

是的,空间SQL有很多可能。由于有递归部分,因此上面的查询比平时更难阅读。有很多很棒的资源可以帮助您入门。
NicklasAvén2010年

3

麻烦的警告很重要,只要您这样做只是出于说明目的,并且不想发挥流体动力学的作用,这可能但会使问题复杂化。

就是说,我认为这是一个有趣的问题,对学生来说可能很有趣。解决问题的另一种方法是将其视为基于栅格的现象,并在每个像元中测量油的密度。从那里,您可以使用考虑到各向异性的模型,例如r.spreaddocumentation)来模拟增长率,也许包括虚假电流以“指导”价差。您可以类似地使用ArcGIS中的不规则形状来解决线性缓冲问题,从而在ArcGIS中对不同种类的焦点操作进行操作


2

我想我很想获得代表电流的矢量特征,并在翘曲操作中将它们用作控制矢量。关键是正确缩放向量,以模仿一天的传播。

我同意安迪·W(Andy W)的观点,将边界划分成点可能是先决条件。您可能还需要浓缩点数才能获得准确的结果。

不确定您在ESRI世界中如何扭曲。我知道Data Interop扩展可以做到这一点,但我想也必须有一个内置方法或专门用于这种事情的扩展。


1

如果有人真的进行了类似的模拟,我不会感到惊讶,但是我认为这是我将如何进行该项目的方法(没有任何有关扩散油泄漏的大洋过程的事先知识)。

如果要严格使用多边形,我会将边界切成预定数量的点。利用这些点,我将介绍您的模拟,其中包括关于扩展方向和扩展距离(在预定的合理范围内)的随机元素,并根据需要重复这些步骤。然后根据新位置重新制作所有点的凸包(如果要始终包含先前的多边形,则必须限制向外扩展)。对于GIS入门课程,鉴于那些随机因素,我可能只是想像一下几种不同的可能迭代。

同样,也有不同的方法,我认为在模拟中将油可视化为代理可能会很酷。例如,每泄漏一个原油桶,要制造一个新剂,然后添加与我之前说的相同的随机元素。您可以及时查看整个海湾地区特工的扩张情况,或者及时查看石油的密度。

这听起来像一个很酷的项目,完成后发布图片。


0

只是为了说明这样一个问题可能产生的各种结果,我将在发布问题时坚持我正在集思广益的解决方案。我希望有机会在未来几天内实施它,并在发布时发布。

  1. 将多边形栅格化为二进制栅格。
  2. 使用随机放置的0和1值创建大于结果1的栅格。0和1值的分布将与多边形需要扩展的数量匹配。因此,如果多边形需要扩展5平方公里。要达到其目标,将有5平方公里。价值1个单元格。
  3. 合并(1)和(2)的结果。
  4. 从(3)的结果中删除与原始栅格化多边形不相邻的所有像元。
  5. 将(4)的结果代替原始栅格化的多边形输入(2),然后重复直到(1)个像元的数量与目标区域匹配。

这可能不是最有效的方法,但是应该可以。这个想法是基于高年级学生所做的城市增长建模练习。它们的随机栅格是根据对增长的适合性而创建的,并且没有面积限制,但是随机增长部分基本相同。

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.