首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用pyvista和pyproj重新构造vtu文件的网格点

用pyvista和pyproj重新构造vtu文件的网格点
EN

Stack Overflow用户
提问于 2021-04-06 10:03:19
回答 1查看 199关注 0票数 0

是否有可能用ndarray替换pyvista_ndarray的坐标?

我的目标是重新设计vtu文件(非结构化网格)的点坐标。网格对象的当前坐标在坐标参考系统EPSG 27672中,我希望它们在EPSG 4326 (WGS84)中。为此,我使用pyvista模块打开vtu文件:

代码语言:javascript
复制
mesh = pv.read("arg_Tm2__t0002.pvtu")
type(mesh.points)
>pyvista.core.pyvista_ndarray.pyvista_ndarray

因此,mesh.points给出了3个空间坐标。然后,使用pyproj模块将3个坐标重新投影到EPSG 4326中。通过组合生成的x,y,z numpy.ndarray,我现在得到了一个形状和大小类似于mesh.points的NumPy数组。

代码语言:javascript
复制
# set the pyproj transformer
crs1 = CRS.from_epsg(27562)
crs2 = CRS.from_epsg(4326)
reproj = Transformer.from_crs(crs1, crs2)
# Reprojection
reproj_dataY,reproj_dataX,altitude = reproj.transform(mesh.points[:,0],mesh.points[:,1],mesh.points[:,2])
reprojData = np.column_stack((reproj_dataX,reproj_dataY,altitude))
#compare objects
print('original Mesh points -> ', mesh.points)
print('original Mesh type: ', type(mesh.points))
print('Reprojected points-> ', reprojData)
print('Reprojected type: ', type(reprojData))

代码语言:javascript
复制
Original Mesh points ->  [[958427.33       119680.95         2396.288549  ]
[957754.39       120023.85         2430.1833881 ]
 [957256.56       120241.02         2112.22953263]
 ...
 [963366.748527   115096.364632     3054.75408138]
 [963401.840285   113351.753238     3024.50286566]
 [963497.913738   113339.696062     3048.83674197]]
Original Mesh type:  <class     'pyvista.core.pyvista_ndarray.pyvista_ndarray'>
Reprojected points->  [[   6.96487903   45.9823843  2396.288549  ]
 [   6.95646936   45.98581994 2430.1833881 ]
 [   6.95021969   45.98803333 2112.22953263]
 ...
 [   7.02498443   45.93857775 3054.75408138]
 [   7.02409542   45.92289079 3024.50286566]
 [   7.02532248   45.92273099 3048.83674197]]
Reprojected type:  <class 'numpy.ndarray'>enter code here

现在,是时候替换vtu对象的坐标了:

代码语言:javascript
复制
mesh.points = reprojData

最后,我检查修改后的网格:X界和Y界已经修改,范围是正确的。然而,图中显示了一行点,而不是一个漂亮的3d对象。*

你知道怎么回事吗?你看到另一种管理重新投影的方法了吗?

EN

回答 1

Stack Overflow用户

发布于 2021-04-07 07:51:38

转换后的XY和Z值范围有显著差异:

代码语言:javascript
复制
>>>np.array(mesh.bounds).reshape((3,-1)).ptp(axis=1)
array([1.22515302e-01, 7.78657599e-02, 2.47978788e+03])

XY确实在度,Z仍然在米。这种数据的可视化表示是不现实的,因此应该对数据进行调整。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66966578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档