【问题标题】:How do I export x,y,z coordinates from meshgrid arrays?如何从 meshgrid 数组中导出 x、y、z 坐标?
【发布时间】:2019-10-22 16:02:49
【问题描述】:

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

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

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

  1. 等高的矩形 (z=constant)
  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()

【问题讨论】:

  • 当 z 依赖于 x 但 'coords=[]' 部分返回错误时,我也尝试制作一段高程:TypeError: zip 参数 #1 必须支持迭代。我最终发布了第二个问题:link

标签: python numpy


【解决方案1】:

你可以试试

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 次。

【讨论】:

  • 非常感谢拉胡尔!有效!我只需要从 out.writerows 中删除 zip,它就可以正常工作了。
  • @KayaWilson 如果您接受对您有帮助的答案,我们将不胜感激,以供其他用户将来参考。
  • 抱歉,我不知道它是如何工作的。已接受答案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多