python - 如何从网格数组导出 x、y、z 坐标?

标签 python numpy

我正在尝试生成 x、y、z 坐标,以便创建用于 GIS 软件和建模的理想化景观。我是Python新手,它肯定会显示出来。

为此,我想以规则的网格间隔创建一个由 x、y、z 点组成的网格。 x 代表纬度,y 代表经度,z 代表海拔。

我可以将景观分成几个部分,然后将它们缝合在一起:

  1. 等高程的矩形(z=常量)
  2. 矩形,其中 z 取决于 x 或 y。例如斜率,其中 z 随着 x 的增加而增加。

我已经使用了 meshgrid,它创建了一系列数组。我只需要将每个相应的数组位置一起提取即可导出 x、y、z 数据。

我最终将使用更大的数据集来完成此操作,但下面的代码适用于 16 个点。

测试运行

将 numpy 导入为 np 将 matplotlib.pyplot 导入为 plt

创建间隔为 30 的坐标,从 x=313000、y=6220000 开始,z 恒定为 15

sp=(30)
x=np.arange(313000, 313120, sp)
y=np.arange(6220000,6220120, sp)
z=np.repeat(15,4)
x_mesh, y_mesh, z_mesh=np.meshgrid(x,y,z)

显示网格散点图

plt.scatter(x_mesh, y_mesh, z_mesh)
plt.show

从网格创建坐标

坐标=??? 打印(坐标)

将坐标导出到 csv 文件

导入 csv

with open('coords.csv','w') as f: out = csv.writer(f, 分隔符=',') out.writerows(zip(*坐标)) f.close()

最佳答案

你可以试试

coords = []
for a, b, c in  zip(x_mesh, y_mesh, z_mesh):
    for a1, b1, c1 in zip(a, b, c):
        for a2, b2, c2 in zip(a1, b1, c1):
            coords.append((a2, b2, c2,))

或者 列表理解

coords = [(a2, b2, c2,) for a, b, c in zip(x_mesh, y_mesh, z_mesh) for a1, b1, c1 in zip(a, b, c) for a2, b2, c2 in zip(a1, b1, c1)]

coords的长度取决于这里的数字z=np.repeat(15, x),它有一个关系
Number点数 * x
您的绘图也将绘制 x = 1 的 16 个点。
当您增加 x 时,每个点都会重复 x 次。

关于python - 如何从网格数组导出 x、y、z 坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56489365/

相关文章:

python - 多个标签掩码上的 Numpy,矢量化函数

python - Numpy/Python 中的快速性能数组处理

python - 绘制 numpy.ndarray

python - 如何在Python插件中使用多个窗口

python - 如何将文本文件的信息放入元组中以转换为 SQL 表?

python - Tkinter 设置输入文本格式

python - 一旦数据进入 Cython 模块,精度就会丢失/更改

python - 使用 MULTIINDEX 对数据帧进行排序

python - 如何用条件填充缺失值?

python - 设置两个数组之间的时间步延迟