有时候,需要在线上的指定位置取点。完全没经验的人,可能会手足无措,不知道该怎么取。今天就来分享一下,怎么使用不同的方式来在线上取点。
今天选用的几种方式,各有优点。但需要说明的是:平台之间无优劣,合适自己的,就是最好的。今天要展示的三种方式分别是:FME方式、Python方式、ArcPY方式。
这个之前就写过类似的了:【FME】使用FME沿线生成点(一)【FME】使用FME沿线生成点(二) 对于起始点和终止点,今天来介绍另一种方式:转换器VertexRemover 生成起终点的设置如下图所示:
起点设置
终点设置
中间点的生成,见之前的沿线生成点1、2。 VertexRemover不像转换器名字一样,只能用来移除节点。其实它还有一种如上图所示的keep模式,这种模式下的转换器就保留指定索引的节点,而不是移除。如上图起终点截图所示,0,-1就是起终点的节点索引。 转换器参数一调整,用起来也是非常灵活的!
Python非常强,有很多gis相关的库,这里我使用的是shapely。
纯Py实现方式:
from shapely.geometry import LineString
#初始化一条线
line = LineString([(0,0),(0,1)])
#生成并打印出中点坐标
mid_point = line.interpolate(0.5)
print(mid_point.x,mid_point.y)
#起点
start_point = line.interpolate(0)
print(start_point.x,start_point.y)
#终点
end_point = line.interpolate(1)
print(end_point.x,end_point.y)
可以看到,纯Python获取起点终点及中点,每种都只需要一行代码,非常简单。
ArcPY也是PY,Python能做的,这么优秀的商业库也必须可以,这里要推荐一下虾神最近在更新的ArcPY相关推送,感兴趣的可以点击这个超链接去瞅瞅。
ArcPY实现方式:
import arcpy
#初始化一条线
coods = [(0,0),(0,1)]
line = arcpy.Polyline(arcpy.Array([arcpy.Point(i[0],i[1])for i in coods]))
#生成并打印出中点坐标
mid_point = line.positionAlongLine(0.5,True).firstPoint
print(mid_point.x,mid_point.y)
#起点
start_point = line.positionAlongLine(0,True).firstPoint
print(start_point.x,start_point.y)
#终点
end_point = line.positionAlongLine(1,True).firstPoint
print(end_point.x,end_point.y)
瞅瞅,跟纯Python不能说完全一样,但简直一模一样啊有没有?
ArcPY,其实就是Python的一个库啊!
既然都一样,那也就没啥好说的了,你说是不?
在线上取点的方法很多,我就不一一列举了。本文取了三种点,只要掌握了上面说的方法,基本上也就会了在任意处取点了。
三种方式,其实原理都差不多:都是在线段的一半处生成一个点,以此来作为中点。相比中点,起终点显然更好生成,不论是Python还是FME,生成中点都有很多种方式。
以上展示了三种取线段节点的方式,我觉得都挺好用的,你呢?
最后做一个小的调查。
从我学习技术的经验来说,光看不练学不会技术。真正的技术,还是要上手练的。
我的QQ和微信交流群里,经常会有一些朋友问一些有意思的问题,这些问题有适合探索的、有适合研究的、也有一些初学者经常遇到的非常典型的……
比如:如何找到并去除上图中的狭长面?
有时候看到这些问题,我就在想:可不可以把这些问题中比较有代表性的一部分,拿来做成题目。然后把题目发出来让大家可以一起做,一起思考,一起学习呢?
如果我发出类似的题目,并组织收取作品,解答题目,你会参与吗?
题目发布、解答的详细方案,将在调查结束后给出,谢谢支持!