android - 将未投影的雷达图像投影到 osmdroid 中

标签 android openstreetmap osmdroid

我已经使用 osmdroid 编写了一个雷达天气应用程序用于 map 图 block ,并手动叠加 NOAA 山脊雷达数据。一切都很好,除了雷达图像未投影,而 openstreetmap 瓦片采用横向墨卡托投影。天气在应有的范围内,但数据失真。

我看到了三种解决此问题的方法(按优先顺序排列),但是这三种方法都遇到了问题:

1) 找到已经投影在墨卡托中的雷达数据源 - 谷歌搜索数小时后,我什么也没找到 2)在我下载图像后立即以编程方式重新投影图像。有谁知道一个好的API吗? 3) 动态投影它们,也许使用 openlayers.im 阅读可以 openlayers 重新投影,但它可以在 osmdroid mapview 之上使用吗?

有什么想法吗?谢谢你的帮助 迈克

最佳答案

GDAL 是必经之路。据我所知,没有正式的 Android 版本,但是有些人已经成功地让它在 Android 上运行。例如,Nutiteq 在其 AdvancedMap3D 的 libs 文件夹中有一个构建。示例项目。将两个 armeabi 文件夹的内容放入项目的 lib 文件夹中,您应该能够访问 GDAL 包。

然后看看GDAL in Java页。查看 gdalinfo.java 示例,了解如何加载和检查 GDAL 数据集的各个部分。要重新投影您的数据集,您需要执行以下操作:

SpatialReference sr = new SpatialReference();
sr.ImportFromProj4("+proj=merc +datum=WGS84");
String result[] = new String[1];
sr.ExportToPrettyWkt(result, 1);
String oldProjection = mDataset.getProjection();
String newProjection = result[0];
Dataset newDataset = gdal.AutoCreateWarpedVRT(mDataset, oldProjection, newProjection, gdalconst.GRA_NearestNeighbour, 0.0);
Dataset savedDataset = mDriver.CreateCopy(outpath, newDataset, 0, new String[] { "COMPRESS=LZW", "PREDICTOR=2" }, null, null);
newDataset.delete();
savedDataset.delete();

您可能需要进行一些调整,但这应该可以帮助您完成大部分工作。

关于android - 将未投影的雷达图像投影到 osmdroid 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18028095/

相关文章:

Java SSL 套接字通信——发送和接收

android - 如何使用 adb logcat 过滤掉 <tagname>

python - 如何将 HEXEWKB 转换为纬度、经度(在 python 中)?

android - OsmDroid setCenter 以错误的位置为中心

java - 下载 OSM Tiles,连接被对等方重置

android - OSMDroid 离线 map ,带有来自自定义服务器的 zip

java - OSMDroid PathOverlay

android - 如何在没有人窃取 token 的情况下使用我的移动应用程序中的 API

android - 找不到类 'com.google.android.gms.location.internal.ParcelableGeofence

python - 如何使用 Python/R 在开放街道 map 中绘制路线?