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

时间:2019-06-07 06:56:36

标签: 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点。

试运行

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()

1 个答案:

答案 0 :(得分:0)

您可以尝试

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
有关系 您的绘图也将在x = 1的情况下绘图16个点。
随着x的增加,每个点都会重复x次。