相关疑难解决方法(0)

着色Voronoi图

我正在尝试着色使用创建的Voronoi图scipy.spatial.Voronoi.这是我的代码:

import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial import Voronoi, voronoi_plot_2d

# make up data points
points = np.random.rand(15,2)

# compute Voronoi tesselation
vor = Voronoi(points)

# plot
voronoi_plot_2d(vor)

# colorize
for region in vor.regions:
    if not -1 in region:
        polygon = [vor.vertices[i] for i in region]
        plt.fill(*zip(*polygon))

plt.show()
Run Code Online (Sandbox Code Playgroud)

结果图像:

Voronoi图

正如您所看到的,图像边界处的一些Voronoi区域没有着色.这是因为这些区域的Voronoi顶点的一些索引被设置为-1,即,对于Voronoi图之外的那些顶点.根据文件:

区域:(整数列表,形状(nregions,*))形成每个Voronoi区域的Voronoi顶点的索引.-1表示Voronoi图外的顶点.

为了使这些区域着色,我试图从多边形中删除这些"外部"顶点,但这不起作用.我想,我需要在图像区域的边界填写一些点,但我似乎无法弄清楚如何合理地实现这一点.

有人可以帮忙吗?

python visualization voronoi matplotlib scipy

48
推荐指数
3
解决办法
3万
查看次数

剪辑voronoi图python

我正在从一组点计算voronoi图,如下所示:

from scipy.spatial import Voronoi
import numpy as np


np.random.seed(0)
points = np.random.uniform(-0.5, 0.5, (100, 2))
// Compute Voronoi
v = Voronoi(points)
voronoi_plot_2d(v)
plt.show()
Run Code Online (Sandbox Code Playgroud)

这将创建如下图像:

维诺

可以看出,这是创建无限远(虚线)的顶点,也是创建点的原始边界框之外的顶点:

 bbox = np.array([[-0.5, -0.5], [0.5, -0.5], [0.5, 0.5], [-0.5, 0.5]])
Run Code Online (Sandbox Code Playgroud)

我想要做的是将voronoi图剪辑到此边界框,即将出界和无限顶点投影到此边界框上的适当位置.因此,需要重新排列顶点并将其投影回来自无限远或有限顶点的适当交叉点,但这些顶点超出了剪切区域的界限.

python voronoi spatial scipy computational-geometry

5
推荐指数
1
解决办法
3265
查看次数

将地理区域划分为相等大小的网格并检索索引位置

我有北京地区人员流动的GPS坐标。我想将地理空间划分为例如 2 平方公里(增量)的矩形网格,并访问网格内任何点的索引位置。单元格的大小不需要完全相同,在我的情况下可以使用近似值。

我的地理区域具有以下边界框坐标(纬度、经度)。

Bottom Left  (x1,y1) = 39.77750000, 116.17944444  
Top Left     (x1,y2) = 40.04722222, 116.58888889  
Bottom Right (x2,y1) = 39.77750000, 116.58888889  
Top Right    (x2,y2) = 40.04722222, 116.17944444  
Run Code Online (Sandbox Code Playgroud)

这是 30 公里 x 34 公里的矩形区域。我心中的解决方案是取delta为2km,以delta增加纬度和经度值,直到达到上限。
要访问 GPS 点 p 的索引位置,令 BL 为矩形区域的左下点

Row =    Distance [(p.lat,BL.long), (BL.lat, BL.long)] / delta 
Column = Distance [(BL.lat,p.long), (BL.lat, BL.long)] / delta 
Run Code Online (Sandbox Code Playgroud)

有没有更简单的方法或支持库来解决这个问题?最好是行和列(x,y)的组合,这样我就可以通过在笛卡尔坐标系中找到两个网格单元之间的距离来测量网格单元的紧密程度。示例图像和输入数据集可以让您清楚地了解描述。

在此输入图像描述

链接中给出的输入数据集https://drive.google.com/file/d/1JjvS7igTmrtLA4E5Rs5D6tsdAXqzpYqX/view

geopy python-3.x pandas

5
推荐指数
1
解决办法
8002
查看次数