ThinkGeo.com    |     Documentation    |     Premium Support

GoogleMaps or OpenStreetMap overlay - tiles not stitched together correctly

Hi,



I’m testing the use of GoogleMapsOverlay and OpenStreetMapOverlay in a WPF test project, and I’m having some issues when translating the WinForms samples in the evaluation download to WPF. The issue is that when using the MultipleTiles TileType, the tiles are not stiched together as expected. The screenshot in the attachments shows this I hope. Is this a matter of projection? I did not check that the sample runs fine in the WinForms setup, as I did not download the evaluation version for WinForms.



Just to make sure that the configuration is clear, this is the code behind of the XAML view:





01.private void WpfMap1_OnLoaded(object sender, RoutedEventArgs e)
02.{
03.    WpfMap1.MapUnit = GeographyUnit.Meter;
04.    WpfMap1.BackgroundOverlay.BackgroundBrush = new GeoSolidBrush(GeoColor.FromArgb(255, 198, 255, 255));
05. 
06.    var googleOverlay = new GoogleMapsOverlay
07.    {
08.        MapType = GoogleMapsMapType.Terrain,
09.        TileType = TileType.MultipleTile
10.    };
11. 
12.    WpfMap1.Overlays.Add(googleOverlay);
13. 
14.    // This sets the zoom levels to map to Googles.  We next make sure we snap to the zoomlevels
15.    WpfMap1.ZoomLevelSet = new GoogleMapsZoomLevelSet();
16. 
17.    var pointLayer = new InMemoryFeatureLayer();
18.    pointLayer.Open();
19.    pointLayer.Columns.Add(new FeatureSourceColumn(“Text”));
20.    pointLayer.Close();
21. 
22.    //Sets the projection parameters to go from Geodetic (EPSG 4326) or decimal degrees to Google Map projection (Spherical Mercator).
23.    var proj4 = new Proj4Projection
24.    {
25.        InternalProjectionParametersString =
26.            Proj4Projection.GetEpsgParametersString(4326),
27.        ExternalProjectionParametersString =
28.            Proj4Projection.GetGoogleMapParametersString()
29.    };
30. 
31.    //Applies the projection to the InMemoryFeatureLayer so that the point in decimal degrees (Longitude/Latitude) can be 
32.    //match the projection of Google Map.
33.    pointLayer.FeatureSource.Projection = proj4;
34. 
35.    //Values in Longitude and Latitude.
36.    const double Longitude = -95.2809;
37.    const double Latitude = 38.9543;
38. 
39.    //Creates the feature made of a PointShape with the Longitude and Latitude values.
40.    var gpsFeature = new Feature(new PointShape(Longitude, Latitude));
41. 
42.    //Format the Longitude and Latitude into a nice string as Degrees Minutes and Seconds
43.    var longLat = DecimalDegreesHelper.GetDegreesMinutesSecondsStringFromDecimalDegreePoint(gpsFeature);
44. 
45.    //Sets the InMemoryFeatureLayer to have it displayed with Square symbol and with text.
46.    gpsFeature.ColumnValues.Add(“Text”, longLat);
47.    pointLayer.InternalFeatures.Add(gpsFeature);
48. 
49.    pointLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle =
50.        PointStyles.CreateSimplePointStyle(
51.            PointSymbolType.Square, GeoColor.StandardColors.Red, GeoColor.StandardColors.Black, 2, 12);
52.    pointLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = TextStyles.CreateSimpleTextStyle(
53.        “Text”,
54.        “Arial”,
55.        12,
56.        DrawingFontStyles.Bold,
57.        GeoColor.StandardColors.Black,
58.        GeoColor.StandardColors.White,
59.        3,
60.        -10,
61.        10);
62.    pointLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
63. 
64.    var pointOverlay = new LayerOverlay();
65.    pointOverlay.Layers.Add(“PointLayer”, pointLayer);
66.    WpfMap1.Overlays.Add(“PointOverlay”, pointOverlay);
67. 
68.    //Sets the extend of the map based on the GPS point.
69.    proj4.Open();
70.    var projVertex = proj4.ConvertToExternalProjection(Longitude, Latitude);
71.    proj4.Close();
72. 
73.    const double ExtendWidth = 2300;
74.    const double ExtendHeight = 1200;
75. 
76.    WpfMap1.CurrentExtent = new RectangleShape(
77.        (projVertex.X - ExtendWidth),
78.        (projVertex.Y + ExtendHeight),
79.        (projVertex.X + ExtendWidth),
80.        (projVertex.Y - ExtendHeight));
81. 
82.    WpfMap1.Refresh();
83.}


And this is the XAML:




<Window
        xmlns="<a href=“schemas.microsoft.com/winfx/2006/xaml/presentation">schemas.microsoft.com/winfx/...esentation</a>"
        xmlns:x=”<a href="schemas.microsoft.com/winfx/2006/xaml">schemas.microsoft.com/winfx/2006/xaml</a>"
        xmlns:WpfDesktopEdition=“clr-namespace:ThinkGeo.MapSuite.WpfDesktopEdition;assembly=WpfDesktopEdition” x:Class=“ThinkGeo.Client.GpsToGoogleMap”
        Title=“OpenStreetMapBasic” >
      <WpfDesktopEdition:WpfMap Grid.Row=“0” x:Name=“WpfMap1” Loaded=“WpfMap1_OnLoaded” >
      <!–</code–>WpfDesktopEdition:WpfMap>

<!–</code–>Window>







This is of course an issue that is blocking for any further evaluation, which is unfortunate as the feature set looks promising, and I’m guessing that this will be a matter of some setting I’m not aware of.



Help would be appreciated.


GpsToGoogleMapDesktop.PNG (59.9 KB)

Hi Serge,


Sorry to tell you that I use both 7.0.0.0 and the 7.0.104.0 version but cannot recreate your issue, attached picture is what I got from the sample, could you please get the latest and have another try? 



Waiting for your further information.



Summer



Hi,





Weird, I’m using the samples in the “Map Suite Wpf Desktop Evaluation Edition 7.0” download of a couple of days ago. See the screenshot after I copied and pasted my code in the “DisplayASimpleMap” sample. The same problem is present. I did explicitly set the TileType to MultipleTiles. With SingleTile there is no issue of course.



What I do see in debug mode are first chance System.NotSupportedExceptions in the output window. After some googling I’m not sure if it’s related somehow. This is what I see:



Message: "No imaging component suitable to coplete this operation was found"

StackTrace: "   at System.Windows.Media.Imaging.BitmapDecoder.SetupDecoderFromUriOrStream(Uri uri, Stream stream, BitmapCacheOption cacheOption, Guid& clsId, Boolean& isOriginalWritable, Stream& uriStream, UnmanagedMemoryStream& unmanagedMemoryStream, SafeFileHandle& safeFilehandle)"

The inner exception is a COMException "Exception from HRESULT:0x88982F50"



These are the versions of components I use:

MapSuiteCore: 7.0.0.0

WpfDesktopEdition: 7.0.0.0



UPDATE: I seem to have the same problem when running the sample provided here:  thinkgeo.com/forums/MapSuite…aspx#41675



Kind Regards,



Serge

001_GoogleMaps.PNG (88 KB)

So I seem to have identified the issue.



I happen to be working on a Macbook Pro, and the problem seems to be tied to the Bootcamp drivers. The sample code works on the machine of one of my coworkers, and even works properly when running on my machine in a virtual machine.



So I think you guys can expect the same issues on clients that use Bootcamp partitions on an Apple machine …



Thanks for the help.

Hi Serge, 
  
 Great to hear it is sorted out, if you have any more question, please feel free to let us know. 
  
 Best Regards 
  
 Summer