使用 pyvista 和 pyproj 重新投影 vtu 文件的网格点

如何解决使用 pyvista 和 pyproj 重新投影 vtu 文件的网格点

我是否可以用 ndarray 替换 pyvista_ndarray 的坐标?

我的目标是重新投影 vtu 文件(非结构化网格)的点坐标。 mesh 对象的当前坐标位于坐标参考系统 epsg 27672 中,我希望它们位于 epsg 4326 (wgs84) 中。 为此,我使用 pyvista 模块打开 vtu 文件

mesh = pv.read("arg_Tm2__t0002.pvtu")
type(mesh.points)
>pyvista.core.pyvista_ndarray.pyvista_ndarray

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

# 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],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))

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 对象的坐标了:

mesh.points = reprojData

最后,我检查了修改后的meshX boundsY bounds 已经被修改并且范围是正确的。但是,该图显示了一条点线,而不是一个漂亮的 3d 对象。 :(.

你知道出了什么问题吗?您是否看到了另一种管理重新投影的方法

解决方法

变换后XY和Z的取值范围明显不同:

>>>np.array(mesh.bounds).reshape((3,-1)).ptp(axis=1)
array([1.22515302e-01,7.78657599e-02,2.47978788e+03])

XY 确实以度为单位,Z 仍然以米为单位。这些数据的可视化表示是不切实际的,应该对数据进行调整。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?