繁体   English   中英

使用Python生成网格上均匀分布的点吗?

[英]Generating evenly spaced points on grid using Python?

我正在尝试在多边形内绘制n个等距点,该多边形是下面在Google地图上显示的站点。 现在,我已经使用gmplot做到了这一点。

谷歌地图

我的目标是在多边形内部创建点网格。

我最近的方法是使用np.meshgrid,然后从网格中选择随机点。 以下是我用来获取积分的代码。 但是,结果不是我所期望的。

def random_points_within(poly, num_points):
    min_x, min_y, max_x, max_y = poly.bounds
    x = (np.linspace(min_x,max_x,1000))
    y=  (np.linspace(min_y,max_y,1000))
    xx,yy = np.meshgrid(x,y,sparse=True)
    xx=xx[0]
    points = []

    while len(points) < num_points:
        random_point = Point([random.choice(xx), random.choice(yy)])
        if (random_point.within(poly)):
            points.append(list(random_point.coords))
    print(min_x,max_x,max_y,min_y)
    return points
    #poly is a polygon created by the edges for the site

更新:

尝试遍历网格上的所有点,最终得到下面的图像。

def random_points_within(poly, num_points):
    min_x, min_y, max_x, max_y = poly.bounds
    x = (np.linspace(min_x,max_x,num_points))
    y=  (np.linspace(min_y,max_y,num_points))
    xx,yy = np.meshgrid(x,y,sparse=True)
    xx = xx.reshape((np.prod(xx.shape),))
    yy = yy.reshape((np.prod(yy.shape),))
    points = []

    for (x,y) in zip(xx,yy):
       random_point = Point([x, y])
       if (random_point.within(poly)):
          points.append(list(random_point.coords))
    print(min_x,max_x,max_y,min_y)
    return points,xx,yy

输出:

在此处输入图片说明

有没有办法得到均匀分布的点?

由于我无法最好地访问多边形对象,所以我可以做一个猜测:

def random_points_within(poly, num_points):
    min_x, min_y, max_x, max_y = poly.bounds
    x = (np.linspace(min_x,max_x,num_points))
    y=  (np.linspace(min_y,max_y,num_points))
    xx,yy = np.meshgrid(x,y,sparse=True)
    xx = xx.reshape((np.prod(xx.shape),))
    yy = yy.reshape((np.prod(yy.shape),))
    points = []

    for x in xx:
       for y in yy:
           random_point = Point([x, y])
           if (random_point.within(poly)):
              points.append(list(random_point.coords))
    print(min_x,max_x,max_y,min_y)
    return points,xx,yy

与程序相比,我所做的唯一更改是,它同时在xx和yy上循环,因此您将覆盖一个区域而不是一行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM