afsuarez/mapsforge-cordova-plugin

Map file not found

egofree71 opened this issue · 3 comments

Hello,

I try to use the plugin with the Ionic framework. When i run it in the android emulator with genymotion, i've always the same error message in the console : 'Map file not found'. Here is the code in the controller :

$ionicPlatform.ready(function() {

  var mapfile = "/sdcard/Download/albania.map";

  // initialize the map on the "map" div with a given center and zoom
  var map = L.map('map', {
      center: [41.328341,19.818761],
      zoom: 9
  });

  mapsforge.cache.initialize(mapfile,
      function() {
          console.log("map file loaded");
          L.offlineTileLayer({
              maxZoom: 18,
              attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
          }).addTo(map);

      },
      function(error) {
          console.log("error loading map file: " + mapfile);
          console.dir("error:" + error);
      });

}

I've uploaded the 'map into the download folder by dragging the file into the emulator, and i can see the file in the file manager of the emulator. I tested many different paths (for instance /storage/emulated/0/Download/albania.map, /sdcard/Download/albania.map, etc.), but the plugin never finds the map file . Also by default, the map is stored within my project in the www/data folder. So i tried also '/android_asset/www/data' or 'file:///android_asset/www/data' folders, but it's not working.
Do you have any idea how to specify the folder ?

Hello.
I've been checking it out and I could load the map (I put an alert in both callback functions to see if it was working).

Emulator

I placed the file under /storage/sdcard, as you can see below:

DDMS

If you place it under 'Download' for example, try /storage/sdcard/Download/albania.map or /mnt/sdcard/Download/albania.map.

The way it is done in the code is like this:

SetMapFileMethod

So the path you pass is the path it is going to look for.

WWW folder

Abour placing it under the www folder....I don't know, I mean, I'm not sure how cordova packages that folder so trying to guess its path it is going to be difficult. If you want to include the map in your application from the begining I would place it under the www and then through javascript load it from that folder and save it to the android filesystem with the File API plugin (since I guess you will be able to get the file with a simple path like js/albania.map or data/albania.map like you would do to get CSS or JS files).

Thanks for your help.

I've worked again on this problem, and i've finally found a solution. I write my results here, as it could be useful for others. First, it's doesn't seem possible for security reason to access directly files stored in the project folder :
"Chrome requires --allow-file-access-from-files run argument to support API via file:/// protocol."

https://github.com/apache/cordova-plugin-file

A solution is to download and store the map in the /Download folder of the sdCard (/mnt/sdcard/Download/albania.map)