如何从网格数组导出 x,y,z 坐标?



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

为此,我想以固定的网格间隔创建一个 x,y,z 点的网格。 x 表示纬度、y、经度和 z,高程。

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

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

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

我最终将使用更大的数据集来做到这一点,但下面的代码是 16 点。

试运转

import numpy as np import matplotlib.pyplot as 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

从网格网格创建坐标

coords=??? print(coords)

将坐标导出为 CSV 文件

import csv

with open('coords.csv','w') as f: out = csv.writer(f, delimiter=',') out.writerows(zip(*coords)) 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 of points * x
您的绘图也将绘制 16 个点,x = 1。
当您增加 x 时,每个点都会重复 x 次。

最新更新