ThinkGeo.com    |     Documentation    |     Premium Support

Bing Map Displaying Geometry off target in Windows Phone

I have geometry data in decimal/degree. I use the following code to create plygon features in meters and show on Bing:







01.Collection<Feature> GeometrySource = new Collection<Feature>();
02. 
03.Proj4Projection wgs84ToBingProjection = new Proj4Projection();        
04.wgs84ToBingProjection.InternalProjectionParameters = Proj4Projection.GetWgs84ParametersString();
05.wgs84ToBingProjection.ExternalProjectionParameters = Proj4Projection.GetBingMapParametersString();
06. 
07.mapView.MapUnit = GeographyUnit.Meter;
08. 
09.//add polygon geometry from decimal to meter
10.var wkt = “MULTIPOLYGON (((153.524037 -28.498472, 153.523862 -28.498368, 153.523872 -28.498313, 153.522815 -28.49754, 153.522267 -28.497456, 153.522085 -28.497335, 153.52199 -28.496912, 153.521821 -28.496851, 153.521158 -28.496832, 153.520307 -28.496703, 153.519958 -28.495789, 153.519853 -28.495047, 153.520196 -28.49465, 153.51935 -28.49412, 153.518921 -28.494059, 153.518301 -28.493425, 153.518185 -28.493528, 153.518079 -28.493408, 153.517854 -28.493586, 153.516154 -28.495845, 153.515681 -28.496111, 153.515611 -28.496495, 153.515958 -28.497056, 153.515952 -28.497245, 153.515541 -28.497192, 153.515151 -28.499144, 153.515572 -28.498816, 153.516452 -28.499015, 153.516862 -28.498971, 153.516972 -28.498986, 153.51762 -28.499208, 153.517913 -28.499438, 153.516892 -28.499142, 153.516472 -28.499215, 153.515602 -28.499017, 153.51511 -28.499395, 153.514964 -28.500276, 153.515872 -28.500527, 153.516602 -28.500785, 153.518452 -28.501494, 153.519034 -28.501611, 153.518397 -28.505074, 153.522304 -28.505621, 153.523145 -28.500816, 153.523428 -28.500727, 153.523604 -28.499773, 153.523288 -28.499487, 153.523127 -28.499221, 153.522288 -28.499088, 153.522007 -28.498937, 153.521256 -28.499067, 153.520954 -28.498921, 153.520459 -28.498929, 153.519935 -28.499166, 153.518793 -28.499317, 153.518742 -28.499156, 153.519872 -28.498996, 153.52001 -28.498945, 153.520416 -28.498749, 153.520994 -28.498739, 153.521282 -28.498878, 153.522006 -28.498734, 153.522368 -28.498909, 153.523262 -28.499055, 153.523218 -28.498984, 153.523419 -28.49846, 153.523832 -28.498522, 153.524037 -28.498472)), ((153.528358 -28.505154, 153.528186 -28.504247, 153.528127 -28.5042, 153.527784 -28.504181, 153.52791 -28.505227, 153.528056 -28.505199, 153.528358 -28.505154)))”;
11.wgs84ToBingProjection.Open();
12.BaseShape  poly = new MultiPolygonShape(wkt);
13.Faeature     f = new Feature((PolygonShape)wgs84ToBingProjection.ConvertToExternalProjection(poly));   
14.GeometrySource.Add(f);
15.wgs84ToBingProjection.Close();
16. 
17.//set extent
18.wgs84ToBingProjection.Open();
19.RectangleShape mapExtent = (RectangleShape)ExtentHelper.GetBoundingBoxOfItems(GeometrySource).CloneDeep();
20.mapExtent = wgs84ToBingProjection.ConvertToExternalProjection(mapExtent);
21.wgs84ToBingProjection.Close();
22.mapView.CurrentExtent = mapExtent;
23.mapExtent.ScaleUp(100);
24. 
25.//Keep geometry feature in InMemoryFeatureLayer
26.var SourceFeatureLayer = new InMemoryFeatureLayer();
27.SourceFeatureLayer.Open();
28.SourceFeatureLayer.Columns.Add(new FeatureSourceColumn(“Name”));
29. 
30.SourceFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = new AreaStyle(new GeoSolidBrush(BrushColor));
31.SourceFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Color = GeoColor.SimpleColors.Black;
32.SourceFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
33.SourceFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = new TextStyle(“Name”new GeoFont(“Arail”, 9, DrawingFontStyles.Bold), new GeoSolidBrush(GeoColor.SimpleColors.Black));
34.SourceFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.SecondaryRoad2;
35. 
36.foreach (Feature feature in GeometrySource)
37.{
38.SourceFeatureLayer.InternalFeatures.Add(feature);
39.}
40. 
41.//create bing overlay as base
42.var bingKey = “Bing Key here”;
43.BingMapsOverlay bingMapOverlay = new BingMapsOverlay(“Agtrix”, bingKey, BingMapsStyle.Hybrid);            
44.bingMapOverlay.BingMapsStyle = BingMapsStyle.Hybrid;            
45.mapView.Overlays.Add(“bing”,bingMapOverlay);
46. 
47.//add feature overlay which should display polygon on Bing map
48.LayerOverlay layerOverlay = new LayerOverlay();
49.layerOverlay.Layers.Add(“SourceLayer”, SourceFeatureLayer);
50.mapView.Overlays.Add(“LayerOverlay”, layerOverlay);










This code works well in android but in WP the geometry are displayed off target (as shown in the snapshot attached…May I know what’s wrong? or Can you produce a sample code to achieve this?

Note the geometry is of the form: “MULTIPOLYGON (((153.524037 -28.498472, 153.523862 -28.498368,…”.



And by the way, why is the map a white area on certain zoom level? See another file attached.














off-target-geom-wp-white.png (22.8 KB)
off-target-geom-wp.png (46.5 KB)

Hi zeeshan, 
  
 Thanks for your post, the problem is a little complex, our developer is look into it. 
  
 Any update I will let you know. 
  
 Regards, 
  
 Don

Thanks. I have edited the query to look more logical. I can also provide you the sample project if it does not give you an idea of what I really  want.

Hi zeeshan,



That’s very kind of you. Our developer can reproduce this issue and they are still working on this. Any process we will update here.



Regards,

Kevin

Hi zeeshan, 
  
 It has been fixed now, please get the modified version at ap.thinkgeo.com:5001/fbsharing/Oee0dJRM to have a try. 
  
 Thanks, 
 Johnny

Yes, it is. Thanks. Now the issue is when I move along and want to show marker on every Location Change I get an ArgumentOutOfRange exception as shown in the attached snapshot.



Background:


I have created a Map View XF renderer which listens for GPS location change and repeatedly calls the following function:




01.   private bool navigateToCurrentPosition(Xamarin.Forms.Point currentLocation)
02.        {
03.//using WPCore=ThinkGeo.MapSuite.WindowsPhoneCore;
04.            try
05.            {                
06.                SimpleMarkerOverlay markerOverlay = nativeMap.Overlays.OfType<SimpleMarkerOverlay>().FirstOrDefault();
07.                WPCore.PointShape location = new WPCore.PointShape(currentLocation.X, currentLocation.Y);
08.                wgs84ToBingProjection.Open();
09.                location = (WPCore.PointShape)wgs84ToBingProjection.ConvertToExternalProjection(location);
10.                wgs84ToBingProjection.Close();
11. 
12. 
13.                if (markerOverlay != null)
14.                {
15.                    markerOverlay.Markers.Clear();
16.                    locationMarker = new Marker(location)
17.                    {
18.                        ImageSource = markerImage,
19.                        ImageOffsetX = -28,
20.                        ImageOffsetY = -32
21.                    };
22.                    markerOverlay.Markers.Add(locationMarker);
23.                    markerOverlay.Refresh();
24.                }
25.                 
26.                nativeMap.MoveTo(location);            
27.            
28.            }             
29.            catch (Exception)
30.            {
31.                return false;
32.            }
33.            return true;
34.        }





Note that the same function runs well in Android Renderer (And when used in WP native Page;.i.e. without renderer). Does calling the above function repeatedly cause the exception to raise in WP? Can you reproduce the issue by implementing a XF MapView Renderer which does the same thing?

zoomto-error.png (49.7 KB)

Hi zeeshan,



I guess there isn’t any problem with the code shown here, but I was wondering if you can give the data of currentLocation to us, then we can do a test to see what the exception it is, then we can dig into it as well, if a demo should be appreciated.



Thanks,

Johnny

currentLocation data is X=153.5281, Y=-28.5046. I have prepared a sample solution to reproduce the problem. Plz find attached.
App navigates to this fixed position. And as you click on Navigate button 2 or 3 times, you can see the exception which raises after calling navigateToCurrentPosition(…).

ThinkGeo_Tests.zip (201 KB)

Hi zeeshan, 
  
 It’s proved to be a bug which has been fixed now, please get the latest version at ap.thinkgeo.com:5001/fbsharing/DSvbfeLr to have a try. 
  
 Btw, we are also developing the Xamarin.Forms now, it should be available soon, if you are interested in it, please contact support@thinkgeo.com, maybe they can ask development team for a version. 
  
 Thanks, 
 Johnny

I tried the sample project with new dll’s in ap.thinkgeo.com:5001/fbsharing/DSvbfeLr (Managed Assemblies\Client). But I am still getting the same error.Click on Map a few times and you should see the error. 
 Good that you started working on XF. Will be waiting for any update.

I am waiting for response on this WP dll possible bug fix…

ArgumentOutOfRangeException occurs on WinPhone while calling map.moveTo(point); Same ArgumentOutOfRangeException occurs on android while calling map.CenterAt(point)

Hi zeeshan,



Here is the attached sample we used for test, which is created based your attached, as your demo was unable to be complied. Could you please have a try with the version dll package I pasted? All works fine on our end. 



BTW.the Xamarin Forms edition has been completed by the development team. If you would like to get a version, please contact support@thinkgeo.com.



Thanks,

Johnny

001_ThinkGeo_Tests.zip (130 KB)

1- Which version of Dll’s should I use with this sample? I don’t understand what u mean by “the version dll package I pasted”. 

Can you come back again on this issue as it is still unresolved at my end. When I tap on Map a few times the same ArgumentOutOfRangeException occurs.

2- I used Xamarin Forms Edition and I have one urgent issue/requirement for you to look at:  how to MoveTo/ZoomTo/CenterAt(PointShape)?

Hi Zeeshan, 
  
 Xamarin Forms Edition has synchronized the ZoomTo and CenterAt methods. The MoveTo method is not existing in our other products, so I didn’t add it. I hope current APIs are enough for your most cases. Please try the latest preview version we will send you later today and Feel free to let me know if you have more queries. 
  
 Thanks, 
 Howard

K. Waiting. 

Also, we can’t use XF edition for production until it is released for all platforms; i.e. android, iOS and WinPhone. Happy to see its WP version is also released.

Hi Zeeshan,



Are you using the version "8.0.294.0" which can be downloaded at ap.thinkgeo.com:5001/fbsharing/A07zyrZE ? Here is a video what we use this version with the sample I provided, you see everything works fine. Would you please do a double-check or create a video for us to show the problem you are having? 



Video: screencast.com/t/96NCjMKbQzh



Thanks,

Johnny




Yes, I’m using “8.0.294.0”…and still I am having this issue as shown in the attached screenshot.

Hi Zeeshan, 
  
 Are you sure you test just like what Johnny did on the video and it still have same problem? Do you think that related with IDE or environment? 
  
 Because we change machine to test that still cannot reproduce it. 
  
 Regards, 
  
 Don

Didn’t error description hint you about the possible root cause? 
 I’m not sure how I can help you reproduce the error.  
 What about having a team viewer/skype session to show you raising the error on my machine? 
 Not sure it is related with my dev env. But the client has also complained of app crashing due to (most probably) the same reason.