2013-08-03 89 views
4

我已经使用osmdroid为地图图块编写了雷达天气应用程序,并手动覆盖了NOAA脊线雷达数据。除了雷达图像未被投影之外,一切工作都很好,而openstreetmap拼图则是横向墨卡托投影。天气在它应该的范围内,但数据被扭曲。将未投影的雷达图像投影到osmdroid

我看到三种方式来解决这个问题(按优先顺序排列),但我有与所有三个麻烦:

1)找到墨卡托投影已经雷达数据的来源 - 谷歌搜索后几个小时,我已经没有发现任何东西 2)以编程方式重新投影后,我下载它们的图像。有没有人知道这个好的API? 3)他们在飞行中,可能与openlayers.im阅读,可以openlayers reproject,但它可以在osmdroid mapview的顶部使用?

任何想法?感谢您的帮助 Mike

+0

@ 2:[gdalwarp](http://www.gdal.org/gdalwarp.html)是一个非常强大的光栅图像重投影工具。但是当你谈论已经平铺的数据时,这种方法可能需要额外的工作。 – tyr

+0

谢谢tyr,生病看看 – Raptrflite

+0

看起来像gdal是要走的路,但我似乎无法在android上找到它的良好实施。其他人使用什么?谢谢! – Raptrflite

回答

0

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

您可能需要做一些调整,但应该让你最的方式存在。

+0

谢谢,kurtzmarc ..这让我走上正轨。 – Raptrflite

+0

我似乎无法让进口得到识别:“import org.gdal.gdal.Band;”例如。我花了大部分时间试图让libs和.jar在模块设置(依赖/库)中正确添加。 'GDAL in java'页面提到了绑定API。这是我失踪的吗? 非常感谢您的帮助! – Raptrflite

+0

看起来您需要将[org文件夹](https://github.com/nutiteq/hellomap3d/tree/master/AdvancedMap3D/src/main/java/org)的内容添加到您的项目中。这包含所有的SWIG绑定。如果你四处挖掘,可能还有其他预构建的GDAL库。 – kurtzmarc