Windows Phone 7 Map Control with custom layer in offline mode
Hi WP7 mobile passionate developers!
I'm trying to use the default provided Bing Map control from Windows Phone controls. Specifically I'm trying to use a custom TileSource to provide a custom made tiled map that will be stored in the project as a folder (Content files) or in isolate storage.
Down I present the custom class I try to use with map tiles/images stored in "map" folder in ZXY storage format as content files.
public class CustomTileSource : Microsoft.Phone.Controls.Maps.TileSource
{
private string uriFormat = @"map/{0}/{1}/{2}.png";
public st开发者_如何学编程ring UriFormat
{
get { return uriFormat; }
set { uriFormat = value; }
}
public override Uri GetUri(int x, int y, int zoomLevel)
{
var url = string.Format(UriFormat, zoomLevel, x, y);
return new Uri(url, UriKind.Relative);
}
}
Trying to use this is not working and custom tiles are not shown although no error is thrown. Does anyone tried to use windows phone map control this way? If that's not the right approach which one is? Any workaround?
Thank you in advance!
Claudiu
Have you set the Build Action on your image(s) to Content
?
The Exception is:
This operation is not supported on a relative URI.
at System.Uri.get_AbsoluteUri()
at System.Windows.Media.MultiScaleTileSource.GetTileLayerUrl(IntPtr nativeTarget, Int32 tileLevel, Int32 tileX, Int32 tileY, Int32 uTileImageIndex, IntPtr& fullTileUri, UInt32& fullTileUriLength)
How to get an image from IsolatedStorage, Ressource or MediaLibrary with UriKind.Absolute i not already found out ...maybe you know?
This seems to be quite a FAQ problem - Map Tile Caching for Offline Viewing - shame there isn't an FAQ solution :/
Did you try constructing an absolute file url using the app id as described in this question? Map Tile Caching for Offline Viewing
I tried,
Did you try constructing an absolute file url using the app id as described in this question? Map Tile Caching for Offline Viewing
Map component is not showing me images, but simple
Image.Source = new BitmapImage(new Uri("file:///Applications/Install/0277CC52-888B-4593-A28D-4CFF818E81E7/Install/maps/-1040122162.jpg", UriKind.Absolute));
Is showing image...
You can find a solution in the blog http://invokeit.wordpress.com/2012/06/30/bing-mapcontrol-offline-tiles-solution-wpdev-wp7dev/
In general, you just need
- Override GetUri function in TileSource class: return null to let MapLayerTile ignore this tile, and save the tile information to some background worker
- In the background worker, loading the tile from anywhere, either isolation storage or network, and then manually add it to a MapLayer control.
精彩评论