проецирование непроецируемых радиолокационных изображений в osmdroid

Я написал радиолокационное погодное приложение, используя osmdroid для тайлов карты и вручную накладывая данные радара хребта NOAA. Все работает отлично, за исключением того, что изображения радара не проецируются, а тайлы openstreetmap находятся в поперечной проекции Меркатора. Погода находится в допустимых пределах, но данные искажены.

Я вижу три способа исправить это (в порядке предпочтения), но у меня проблемы со всеми тремя:

1) найти источник радиолокационных данных, уже спроецированных в mercator - спустя несколько часов гугления я ничего не нашел 2) программно перепроецировать изображения сразу после их загрузки. Кто-нибудь знает хороший API для этого? 3) проецировать их на лету, возможно, с чтением openlayers.im, который может перепроецировать openlayers, но можно ли его использовать поверх карты osmdroid?

Есть идеи? Спасибо за любую помощь Майк


person Raptrflite    schedule 03.08.2013    source источник
comment
@2: gdalwarp — довольно мощный инструмент для репроецирования растровых изображений. Но поскольку вы говорите об уже разложенных данных, этот подход может потребовать дополнительной работы.   -  person tyr    schedule 03.08.2013
comment
Спасибо тир, посмотрю   -  person Raptrflite    schedule 03.08.2013
comment
Похоже, gdal — это то, что нужно, но я не могу найти его хорошую реализацию на Android. Чем пользуются все остальные? Спасибо!   -  person Raptrflite    schedule 04.08.2013


Ответы (1)


GDAL - это путь. Я не знаю официальной сборки Android, однако некоторым людям удалось запустить ее на Android. Например, у Nutiteq есть сборка в папке libs их AdvancedMap3D. пример проекта. Поместите содержимое обеих папок armeabi в папку lib вашего проекта, и вы сможете получить доступ к пакетам GDAL.

Затем взгляните на страницу GDAL в 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();

Возможно, вам придется внести некоторые коррективы, но это должно помочь вам в этом.

person kurtzmarc    schedule 06.08.2013
comment
Кажется, я не могу распознать импорт: import org.gdal.gdal.Band; например. Я провел большую часть вечера, пытаясь правильно добавить библиотеки и .jar в настройки модуля (зависимости/библиотеки). На странице «GDAL в java» упоминается API привязок. Это то, чего мне не хватает? Большое спасибо за вашу помощь! - person Raptrflite; 09.08.2013
comment
Похоже, вам нужно добавить содержимое org папку в свой проект. Он содержит все привязки SWIG. Там могут быть и другие готовые библиотеки GDAL, если вы покопаетесь. - person kurtzmarc; 09.08.2013