Reputation: 3
I need to use map rendering library in my android project. I want to use code found in mapsforge website.
First, I must set the map I want to use. Method to do that is setMapFile(String newMapFile)
from MapView
class. I tried to place map file in assets
and res/raw
folder in Eclipse project and then give path to it, but it doesn't work for me.
Could anyone tell me how to correctly deliver path with map to this map?
Upvotes: 0
Views: 863
Reputation: 20961
You'll have to place the map files on the SD card and access them as described in GettingStartedMapView.
One of the mapsforge developers answers a similar question on mapsforge-dev
Google Groups explaining why map files can not be placed inside the app (i.e. in the assets
or res
folder):
[...] The problem is, that a
java.io.RandomAccessFile
instance is needed in order to read the map data from a binary map file. Just having anInputStream
is not enough, as it doesn't have aseek()
method. Callingskip(n)
is not the same. In worst case all n bytes will be read, which is not an option for huge map files.Unfortunately, Android does not offer seekable file access on resources. That is due to the way all resource files are packaged and compressed into one
.apk
file. A quick Google search reveals that many other people are having the same problem. One work around may be to copy the file to the SD card or internal phone filesystem when your application is started for the first time. See: http://groups.google.com/group/android-developers/browse_thread/thread/59b6bf70ca6d2081But depending on the file size, this copying process may take a longer time. Having map files bundled with your application will also increase the size of your APK file a lot. Another disadvantage is that the map file can no longer be updated separately or copied to other devices.
Upvotes: 2