Навигация по заранее известной карте в автономном режиме с помощью Phonegap - PullRequest
4 голосов
/ 15 февраля 2012

Здравствуйте и спасибо заранее,

Я хотел бы спросить, есть ли способ скомпилировать заранее известные фрагменты карты Google и загрузить их в приложение Phonegap.

Дляточнее говоря, я разрабатываю приложение, которое будет касаться геолокации, навигации по маршруту и ​​т. д. в пределах конкретного региона.Из-за характера использования приложения (например, его можно использовать в дикой природе) телефон пользователя может не получить сигнал для подключения к Интернету, поэтому я хочу, чтобы средство интерактивной карты было доступно, даже еслиТелефон не в сети.

Я также рассматриваю возможность получения кэшированных плиток, если карта Google была найдена ранее.Возможно ли это с Phonegap?

Я также открыт для любых предложений по другим картографическим сервисам, не только по картам Google.

Ответы [ 2 ]

9 голосов
/ 15 февраля 2012

Я работал над кэшированием тайлов Open Street Map с помощью телефонного промежутка, используя OpenLayers. Я храню плитки в файловой системе с помощью PhoneGap-Downloader (https://github.com/phonegap/phonegap-plugins/tree/master/Android/Downloader)) и сопоставляю URL плитки с местоположением в файловой системе с помощью localstorage. В openlayers я создаю подкласс OpenLayers.Layer.OSM для перегрузки getURLasync и перехвата установки плитки URL:

РЕДАКТИРОВАТЬ : в последних версиях phonegap плагин PhoneGap-Downloader не требуется, просто используйте собственный перенос файла: http://docs.phonegap.com/en/2.3.0/cordova_file_file.md.html#FileTransfer_download

OSMWithLocalStorage = OpenLayers.Class(OpenLayers.Layer.OSM, {
    initialize: function(options) {
        OpenLayers.Layer.OSM.prototype.initialize.apply(this, ["CachedMap"]);
        this.async = true;
        this.isBaseLayer = true;

        this.url = 'http://tile.openstreetmap.org/${z}/${x}/${y}.png';
    },
    getURLasync: function(bounds, scope, prop, callback) {
        var url = OpenLayers.Layer.OSM.prototype.getURL.apply(this, [bounds]);
        var cached = window.localStorage.get(url);

        if(cached){
            scope[prop] = cached;
        }
        else{
            scope[prop] = url;
        }

        callback.apply(scope);
    },
});
2 голосов
/ 15 февраля 2012

FWIW, тайлы предварительного кэширования соответствуют TOS Google Maps: http://code.google.com/apis/maps/terms.html

Лучше всего было бы использовать OpenStreetMaps вместе с одной из библиотек, такой как MapsForge, для предварительного кэширования плиток.

Редактировать: Используя приведенный выше код gmh04, мы используем библиотеку MapsForge для кэширования набора плиток OSM, а затем включаем их код кэша в плагин PhoneGap, который будет обслуживать листы изображений в формате изображения base64 (то есть «данные»: image / png; base64, {img data} "). Измените его метод getURLAsync, чтобы он вызывал плагин вместо ссылки на localalstorage, до сих пор прекрасно работает.

...