我是python编码的初学者,我的主要工作领域是地球科学。我有一个庞大的数据库(数百万个点),其中包含以UTM表示的坐标(x,y)(这对我正在描述的问题而言并不重要),它表示半径为r的圆心。我想根据以多个半径表示的阈值(例如1 * r / 2 * r / 3.5 * r等)来减少这些点的数量;比阈值更近的点应从点列表中拒绝。我想创建一个新的遮罩通道,该通道将为接受的点显示1,为被拒绝的点显示0,并将结果绘制为半径为r的圆(以点为中心),既是原始点集又是新的接受通道点。图表中的不同颜色(标记为轴/标题/摘要图例)。在开始处理之前,应按升序整理数据点。我希望能够将图形导出为图像和pdf地图。 #
-
列表项
- 数据类似于:
- xy_data =
- [[687690.,992340。],
- [687720.,992340。],
- [693210.,993000。],
- [693420.,999420。],
- [693450.,999420。],
- [693480.,999420。],
- [693540.,999210。],
- [693570.,999210。],
- [693840.,999870。],
- [693870.,999870。],
- [693900.,999870。],
- [694200.,1000530。],
- [694230.,1000530。],
- [694260.,1000530。],
- [694890.,999240。]]
- ...
- ...
- ...
请在底部查看我尝试过的方法,这对我来说是一种不良的编码方式。请提出一种更好的python方法来完成此任务。
在此先感谢您的帮助和协助(请为每个步骤提供解释,请随时提出有助于理解程序设计部分的读物)
import numpy as np
from scipy.spatial import distance
from scipy.spatial.distance import cdist
r = 100.
k = 0
N = xy_data[:].shape[0] # xy_data is input data as shown above
dist_tol = 3*r
Mask = np.ones(N)
sep = np.ones(N) # points separation
point_dist3 = np.ones(N).reshape(1,N)
for i in np.arange(k,N - 1,1):
if i == 0 :
point_dist3[:,i] = 0.
sep[i] = 0.
Mask[i] = 1.
for j in np.arange(i+1,N,1):
print('i: ',i,'\tj: ',j,'\tk: ',k)
sep[j] = cdist(xy_data[i:i+1],xy_data[j:j+1])
if sep[j] <= dist_tol: #if point_dist2[:,i] <= dist_tol:
Mask[j] = 0
k = j
else:
continue