创建地理区域和指定点

2024-04-16 06:08:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandas数据框中的坐标列表,希望将每个坐标分配给一个分区。但是,现在我还没有绘制出不同的区域。我的目标是将给定的区域划分为一个网格,网格的每个正方形都是它自己的唯一区域。最后,根据我的坐标,我想计算每个区域内有多少个点。有人知道在python中实现这一点的最佳方法吗?在

lat = df.Latitude.values
lon = df.Longitude.values
coords = zip(lat, lon)

Tags: 数据方法网格区域目标pandasdf列表
1条回答
网友
1楼 · 发布于 2024-04-16 06:08:13

一种选择是使用返回True的函数来实现这个映射,如果x,y对在所述区域内,则返回False否则返回{}。与pandas一起工作,这个功能可以很容易地实现。下面是其中一些函数的示例(三角形函数归功于How to determine if a point is in a 2D triangle?):

def triangle(x,y,verts):
    p0x,p0y = verts[0]; p1x,p1y = verts[1]; p2x,p2y = verts[2];
    area = 0.5 *(-p1y*p2x + p0y*(-p1x + p2x) + p0x*(p1y - p2y) + p1x*p2y);
    s = 1/(2*area)*(p0y*p2x - p0x*p2y + (p2y - p0y)*x + (p0x - p2x)*y);
    t = 1/(2*area)*(p0x*p1y - p0y*p1x + (p0y - p1y)*x + (p1x - p0x)*y);
    return (s>0) & (t>0) & (1-s-t>0)

def upper_square(x,y):
    return (x>4) & (y>4)

def circle(x,y):
    return ((x-2)**2+(y-2)**2)<1

然后,可以循环每个区域,以便将值分配给新列。使用上述函数的一个例子是使用dict将zone函数映射到zone id:

^{pr2}$

在这里,我们有5个区域,一个正方形,两个三角形,一个圆和其他一切。我们可以使用以下绘图检查赋值是否有效,该图将根据df.zone值以不同颜色绘制点:

plt.scatter(df.lat,df.lon,c = df.zone,s=10,cmap='plasma')
plt.gca().set_aspect('equal') 

结果是:

zones

相关问题 更多 >