回答“点对点,保留原始属性” https://knowledge.亚搏在线safe.com/questions/19701/point-to-line-to-point-retain-original-attributes.html “点对点”问题的最新答案,保留原始属性” 高桥回答 https://knowledge.亚搏在线safe.com/answers/19789/view.html网站 @不是我的名字,请这是一个有趣的话题。作为我的自我训练,定义了一个python脚本来高效地执行处理。我会和你分享,但是请注意,它没有经过彻底的测试。此外,这是在这个新社区站点中发布代码的测试。亚搏国际在线官网希望脚本能正确显示;)

测试结果:差,不幸的是。
脚本的前几行没有显示在代码块中。
脚本中的<(小于)和>(大于)已更改为其HTML实体(“<”),“>”)。

#python脚本示例(pythoncaller)从输入点过滤出尖峰顶点,并将剩余部分转换为没有尖峰的线。假设每个输入功能都有一个点几何,这些功能都有一个名为“group id”(正整数)的组id属性,最大尖峰角度为g。i通过一个名为“SpikeAngle”(正数)的用户参数,输入特征的顺序按组ID和连接顺序排序。确定一个点是否为Spike Vertex将仅通过角度进行。如果需要考虑Spike长度,修改并添加一些代码。#可以使用geometryfilter.import fme将输出特征分为点和线,FME对象,MathClassFeatureProcessor(对象):def uu init uuu(self):self.features,self.coords=[],[]存储输入特征及其坐标self.groupid=-1 self.spikangle=float(fme_macrovalues['spikangle'])def输入(self,功能):从输入功能中检索组ID和坐标。gid=int(feature.getattribute('groupid'))coord=feature.getcoordinate(0)如果功能是组中的第一个功能,为上一组创建和输出行,#清除特征和坐标列表,并更新当前组ID。如果gid!=self.groupid:self.outputline()self.features,self.coords=[],[]self.groupid=gid如果存储的功能数量大于1,#确定列表中的最后一个特征(点)是否为尖峰顶点。如果1<len(self.features):x0,y0=self.coords[-2][0],self.coords[-2][1]第二个最后一点x1,y1=self.coords[-1][0],self.coords[-1][1]最后一个点(尖峰顶点的候选点)x2,Y2=坐标[0],坐标[1]电流点(输入特征)ax,是=(x1-x0)(y1-y0)矢量:倒数第二个->倒数第二个BX,by=(x2-x1)(y2-y1)矢量:Last->Current计算两个矢量形成的绝对角度。#如果角度小于或等于规定的最大尖峰角,#输出最后一个特征(点:x1,y1),并将其从列表中删除。角度=180-abs(数学角度(数学角度2(ax*by-ay*bx,ax*bx+ay*by)))如果角度<=self.spikeAngle:self.pyoutput(self.features[-1])输出最后一个功能(spike vertex)self.features.pop()self.coords.pop()将输入功能及其坐标附加到列表中。self.features.append(feature)self.coords.append(coord)def outputline(self):创建线条几何图形并将其设置为组的第一个功能,#然后输出特征(没有尖峰的线)。如果1<len(self.features):self.features[0].setgeometry(fmeobjects.fmeline(self.coords))self.pyoutput(self.features[0])def close(self):为最终组创建并输出行。self.outputline()。
太阳,2015年11月8日05:00:24格林尼治标准时间 高桥
用notmyname回答 https://knowledge.亚搏在线safe.com/answers/19760/view.html网站 在尝试了这两种方法之后(实际上我只有170万分)。在我的64位桌面上。

-基线方法:无属性分配:5分钟
-Takashi方法:要分配的空间过滤器:17分钟50秒
-jonathan方法:listsearch要分配的坐标:7分钟22秒

乔纳森的方法显然更快,但是列表搜索者(我没有尝试其他选择)似乎只根据第一次观察匹配。我的数据集中确实存在这样的情况:一个不正确的点与一个正确的点具有相同的几何图形,因此我不能确定要分配哪个属性。

Takashi的方法较慢,但空间滤波器输出所有具有相同几何体的点,从这一点上,我可以计算出哪些点是不正确的(很可能使用订单值)。
一直以来,我都希望(因为我不太熟悉FME),点连接器将跟踪一个关系(存储一个键)回到源点,以便在以后的时间段内轻松分配属性值(如果该行被断回其点)。

谢谢你们的建议,你们都是对的,Takashi的解决方案更适合我的实际数据,但Jonathan的方法更适合我提供的示例,我希望我可以接受这两个答案。

谢谢,
大卫
周五,2015年11月6日21:05:20格林尼治标准时间 不是我的名字
用notmyname回答 https://knowledge.亚搏在线safe.com/answers/19743/view.html网站 谢谢,我会同时尝试并反馈。我知道按地点加入是可行的,但是我希望它可以从速度列表中得到,并且可能会出现这样一种情况:一个不按顺序“标记”的点与之前的点具有相同的坐标,使其成为一对多的位置连接,然后我需要清理。我也有几百万分,所以这将是一个很好的测试。

谢谢
周五,2015年11月6日14:11:10格林尼治标准时间 不是我的名字
乔纳森回答 https://knowledge.亚搏在线safe.com/answers/19731/view.html网站

@高桥答案很好,但还有另一种方法。

首先将输入坐标连接成一个字符串(_坐标)。
然后在标记点之后,提取并连接其坐标。两个字符串应该相同,所以你需要做的就是通过一个列表搜索器来运行它们。请确保“将找到的列表元素降级”。

我怀疑对于更大的数据集,这种方法比Takashi的方法更有效,因为我希望listsearcher比空间过滤器更快,空间过滤器可能是资源密集型的(并且通常作为分组的拦截器)。我自己还没有在更大的数据集上测试它,所以可能是错误的。


捕获.jpg(58.0 kb)
周五,2015年11月6日11:12:04格林尼治标准时间 乔纳森
高桥回答 https://knowledge.亚搏在线safe.com/answers/19712/view.html网站 你好,

在这种情况下,我认为将原始属性合并到基于空间关系的标记点是一种更简单的方法,而不是通过列表保留它们。例如,将空间过滤器添加到工作区,将原始点发送到其过滤器端口,删除原始属性后,将标记的点发送到其候选端口,然后从通过的端口中选择点。也可以使用空间中继或邻居查找器。
高桥
清华大学,2015年11月5日23:57:50格林尼治标准时间 高桥