“将多边形连接在一起,直到满足属性范围”的注释和答案 https://knowledge.亚搏在线safe.com/questions/81596/joining-polygons-together-until-an-attribute-range.html “在满足属性范围之前将多边形连接在一起”问题的最新评论和答案 johnwk对johnwk的答案的评论 https://knowledge.亚搏在线safe.com/comments/81870/view.html

谢谢@jdh你的答案。因为我以前从未使用过Python,所以我必须花一些时间来了解它。

格林尼治时间2018年11月6日星期二8:41:01 johnwk
johnwk对johnwk的答案的评论 https://knowledge.亚搏在线safe.com/comments/81869/view.html

@gio非常感谢你的回答。不幸的是,我无法访问您提供的链接,它出现了一个错误。这个解决方案听起来很有趣,请重新安装!

2018年11月6日星期二08:36:31格林尼治时间 johnwk
johnwk对johnwk的答案的评论 https://knowledge.亚搏在线safe.com/comments/81868/view.html

@Mark2At亚搏在线Safe,非常感谢您为我详细地研究这个问题,非常感谢。你的装箱方法绝对合乎逻辑,我现在用这个术语来描述我的客户的问题是什么!至于方法本身,我以前从未使用过Python,所以我想我必须自学!

2018年11月6日星期二08:32:42 GMT johnwk
答案由mark2atsafe亚搏在线 https://knowledge.亚搏在线safe.com/answers/81690/view.html

所以我想再深入研究一下,发现它可能就是我们所知道的a本包装问题。您想要用特性填充一个箱子,直到它达到一个设置的限制,然后开始打包到一个新的箱子中。

事实证明,这是一个相当大的挑战。基本上,你可以很容易地检查一个解决方案,但是计算那个解决方案需要更多的时间(就像ShortestPathFinder那样),因为它是一个NP问题。

不过,这是可能的,如果你搜索Python的装箱问题,有一些代码。例如这个页面有一段代码,我在FME运行成功(虽然生成随机数而不是使用传入的FME功能)。

另一个搜索是2D Bin Packing,它返回一些Github存储库像这样。这可能有用,也可能没用。这取决于正在打包的形状是否相互接触(在基于空间的设置中,这是您想要的)。

不管怎样,我希望这能有所帮助。我要和我们的开发人员商量一下,看看我们将来是否能生产出什么东西来。这暂时不会有帮助,但这个问题经常出现,我认为我们需要一个解决方案。

2018年11月2日星期五格林尼治时间16:02:01 mark2at亚搏在线safe
答案由mark2atsafe亚搏在线 https://knowledge.亚搏在线safe.com/answers/81632/view.html

这个问题比你想象的更常见,在FME中没有比循环更好的方法了。但是在处理一组特性时,循环是困难的。我发现的一种方法是取两个相邻的特征,如果可以合并它们(它们的总体可以合并),然后将数据写回。然后再次重新运行工作区——一次又一次——直到有一个解决方案(没有更多的多边形可以合并)。

我的另一个想法是来自FME中心的空间分拣转换器。你可以用它来对数据进行空间排序,这样它就很有序了,每个特征都相邻于下一个。这将使上述部分更容易,因为您不必担心特性是否在空间上相邻。您只需要采用前两个特性并假设它们是相互关联的。

因此,一旦数据通过SpatialSorter运行,您就可以使用AttributeManager中的邻近特性属性设置来获得下一个特性的总体,然后决定是否合并它。

如果您不关心这些多边形是否相邻,那么您可以简单地忽略SpatialSorter,只使用相邻的特性属性。

另一种方法是使用聚合器合并所有特性,创建记录列表。然后可以循环遍历列表,提取值并合并它们。这是一种更简单的循环方法,因为您只处理一个特性,而不是一组特性。

我希望这能有所帮助。我知道这不是在FME中最简单的任务,但我认为这是可能的。

格林尼治时间2018年11月1日星期四19:42:39 mark2at亚搏在线safe
答案由gio https://knowledge.亚搏在线safe.com/answers/81604/view.html

@johnwk


你有我们的样本数据集吗?


多边形需要空间关系吗?


但我认为你是在寻找一个子集(解决方案)从子集到幂集。

确实需要迭代(或者如果使用python或tcl,则需要递归)。对于迭代模式,在超集创建期间测试幂集的元素相对容易。对递归版本没有成功。)

可能有也可能没有一个完整的(包括所有的多边形)解决方案。


这是我在经过几个小时的摆弄和阅读之后编写的一个先前的脚本(它是非递归的)。

它在power set构建中查询,只输出满足条件的集合。(不要全部输出…可以是很大的2^n)

你需要身份证和人口号码。将数据转换为列表。

按照指示替换查询。

SupersetQuery.fmw

格林尼治时间2018年11月1日星期四14:27:26 gio
答案由jdh https://knowledge.亚搏在线safe.com/answers/81603/view.html

看到https://gis.stackexchange.com/questions/123289/grouping-village-points-based-on-distance-and-population-size-using-arcgis-deskt用于分组算法。


虽然可以在本机FME中实现,但我可能会使用标准的转换器来生成连接的组件图,然后在pythonCaller中进行迭代,为每个特性分配一个“组ID”,然后根据需要使用Group by来聚合或分解这些特性。

2018年11月1日星期四格林尼治时间14:25:01 jdh