斯潘8
第4排
你好,我已经绞尽脑汁想办法解决这个问题好几天了,没有灵感来了!
我有一系列包含人口的多边形。目标是从这些多边形中创建更大的多边形,直到它们都在一定的总体范围内(例如,2000年至10000年)。这些多边形是否成为多部分多边形并不重要。
我用分解器和聚合器来结合多边形接触的地方,但是,有时生成的多边形中的总体是:
我曾考虑过使用某种形式的循环转换,在这种转换中,有将多边形连接在一起的迭代,直到满足总体范围为止,然后过滤掉这些,并用剩下的多边形再次执行循环。
对不起的,这是一个有点特殊的问题-但如果有人对此有任何想法,我将非常感谢!
谢谢,
约翰
虽然可以在本机FME中实现,我可能会使用标准的变压器来生成连接的组件图,然后在pythoncaller中进行迭代,为每个功能分配“组ID”,然后你可以根据需要与一个组聚合或溶解。
所以我想再检查一下,发现这可能就是所谓的装箱问题.你想用功能填充一个箱子直到它达到设定的极限,然后开始打包到一个新的箱子里。
事实证明,这是一个相当大的挑战。基本上,你可以很容易地检查一个解决方案,但是要计算这个解决方案需要更多的时间(就像shortestpathfinder那样),因为它是一个NP问题。
不过,这是可能的,并且有一些关于如果您搜索包装问题python的代码。例如本页有一段代码是我在FME中成功运行的(尽管生成随机数而不是使用传入的FME特性)。
另一个搜索是二维装箱,它返回一些Github存储库这样地.这可能有帮助,也可能没有帮助。这取决于正在打包的形状是否相互接触(在基于空间的设置中需要)。
不管怎样,我希望这有帮助。我要和我们的开发人员核实一下,看看我们将来是否能生产出一些东西。现在没用了,但这个问题经常出现,我认为我们需要一个解决方案。
您好!@标记2安全亚搏在线,请非常感谢您能为我详细研究这个问题,非常感谢。您的装箱方法是绝对合理的,是一个术语,我现在用它来形容我的客户是什么问题!至于方法本身,我以前从没用过蟒蛇,所以我想我得自学了!
这个问题比你想象的要普遍,除了循环之外,在FME中没有真正的好方法可以做到这一点。但是,在处理功能组时,循环是很困难的。我发现的一种方法是取两个相邻的特征,如果可以的话,合并它们(它们的人口可以这样做)。然后写回数据。然后重新运行工作区一次又一次,直到有一个解决方案(不能合并更多的多边形)。
我的另一个想法是来自FME中心的空间分拣变压器。你可以用这个对数据进行空间排序,因此,它的顺序相当有序,所以每个特性都与下一个特性相邻。这将使上述部分更容易,因为您不必担心特征是否在空间上相邻。您只需要使用前两个特性并假设它们是连接的。
因此,一旦数据通过空间排序器运行,您就可以使用attributeManager中的相邻功能属性设置来获取下一个功能的总体数据,然后决定是否合并它。
如果你不关心多边形是否相邻,然后,您可以简单地忽略空间排序器并使用相邻的特性属性。
另一种方法是将所有功能与聚合器合并在一起,创建记录列表。然后你可以循环浏览列表,提取值并合并它们。这将是一种更简单的循环方法,因为您只处理一个特性,不是一组功能。
我希望这有帮助。我知道这不是FME中最简单的任务,但我认为这是可能的。
你有样本数据集吗?
多边形需要空间关系吗?
但我认为您正在研究从幂集的子集中搜索一个子集(解决方案)。
确实需要迭代(或者如果使用python或tcl,递归。对于迭代模式,在超集创建期间测试一个功率集的元素相对容易。对递归版本执行此操作失败。)
可能有也可能没有一个整体(包括所有多边形)解决方案。
下面是我在花了几个小时的时间修改和阅读之后所做的一段先前的脚本(它是非递归的)。
它在发电机组建筑内查询,只输出满足条件的机组。(不要全部输出…这可能是巨大的2^n)
你需要身份证和人口号码。将数据转换为列表。
按照说明替换查询。
?2019安全亚搏在线软件公司|法律