ThinkGeo.com    |     Documentation    |     Premium Support

Zoom to current co-ordinates using Bing




I want to zoom to some co-ordinates on page load; Below is my code.

Currently I can’t understand how to zoom the map to a point (let’s say:-33.860000, 151.209389). If I set CurrentExtent to an arbitrary  RectangleShape as in line # 37, it does not work and raises an exception; while line # 38 works. But I need to show the Point zoomed-in. 

How to do this? Also, is there any documentation available for iOS on your site?


01.class MapViewController2 : UIViewController
02.    {
03.        private MapView iOSMap;
04.        public override void ViewDidLoad()
05.        {
06.            base.ViewDidLoad();
07.  
08.            // Set the main view frame
09.            View.Frame = UIScreen.MainScreen.Bounds;
10.            View.BackgroundColor = UIColor.White;
11.            View.AutoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight;
12.  
13.            // Create MapView
14.            iOSMap = new MapView(View.Frame);
15.        iOSMap.MapUnit = GeographyUnit.Meter;   
16.            iOSMap.BackgroundColor = new UIColor(233, 229, 220, 200);
17.            iOSMap.ZoomLevelSet = new BingMapsZoomLevelSet();
18.  
19.            // Add ThinkGeo Location Marker.
20.            Marker thinkGeoLocation = new Marker();
21.        thinkGeoLocation.Position = new PointShape(-28.5537, 153.5084);
22.        thinkGeoLocation.SetImage(UIImage.FromBundle(“Pin”), UIControlState.Normal);
23.            MarkerOverlay markerOverlay = new MarkerOverlay();
24.            markerOverlay.Markers.Add(thinkGeoLocation);
25.            iOSMap.Overlays.Add(“markerOverlay”, markerOverlay);
26.  
27.    BingMapsTileOverlay bingMapOverlay = new BingMapsTileOverlay(“bing key”);
28.    iOSMap.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
29.    iOSMap.Overlays.Add(bingMapOverlay);
30.  
31.    string rootPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
32.    bingMapOverlay.MapType = BingMapsMapType.AerialWithLabels;
33.    bingMapOverlay.TileCache = new FileBitmapTileCache(rootPath + “/CacheImages”, “Road”);
34.    bingMapOverlay.TileCache.TileMatrix.BoundingBoxUnit = GeographyUnit.Meter;
35.    bingMapOverlay.TileCache.TileMatrix.BoundingBox = bingMapOverlay.GetBoundingBox();
36.    bingMapOverlay.TileCache.ImageFormat = TileImageFormat.Jpeg;
37.    //iOSMap.CurrentExtent = new RectangleShape (-32.860000, 151.219389, -33.860000, 151.209389);//this raises an error
38.    iOSMap.CurrentExtent = bingMapOverlay.GetBoundingBox();//this displays map okay; but I need to zoom the map to -33.860000, 151.209389
39.    iOSMap.ZoomTo(iOSMap.CurrentExtent);         
40.    // Add MapView to MainView
41.    View.AddSubview(iOSMap);
42.    iOSMap.Refresh();
43.       }
44.}


Hi zeeshan, 
  
 Your code have two problems: 
  
 1. Your rectangleShape is invalid, as below is the standard and a sample: 
  
 new RectangleShape(double minX, double maxY, double maxX, double minY) 
 new RectangleShape(-33.86000, 151.219389, -32.860000, 151.209389) 
  
 2. I think your currently map unit should be DecimalDegree, or else this rectangle shape will be very small in map. 
 But if you choose BingMap, please keep set iOSMap.MapUnit = GeographyUnit.Meter; 
  
 Regards, 
  
 Don

No. Specifying this RecatngleShape does not help either. I get the following Application Output.

Error while resolving expression: Argument cannot be null.
Parameter name: pathError while resolving expression: Argument cannot be null.
Parameter name: pathError while resolving expression: Argument cannot be null.
Parameter name: path



If you could possibly implement a test case of the above code and send me a running ViewController. Let’s say you have to program a Bing map zoomed in to Sydney.

Hi zeeshan, 
  
 That still is cased by the invalid extent, your extent is work under decimal degree but not under meter. 
  
 Please try this code for extent and make sure MapUnit equal meter: 
  
  
 ManagedProj4Projection wgs84ToBingProjection = new ManagedProj4Projection();
            wgs84ToBingProjection.InternalProjectionParametersString = ManagedProj4Projection.GetWgs84ParametersString();
            wgs84ToBingProjection.ExternalProjectionParametersString = ManagedProj4Projection.GetBingMapParametersString();
            wgs84ToBingProjection.Open();

            map.CurrentExtent = wgs84ToBingProjection.ConvertToExternalProjection(new RectangleShape(-33.86000, 151.219389, -32.860000, 151.209389));
 
  
 Regards, 
  
 Don

No, it does not zoom to the marker/required position (Sydney); plz check the full code below; as you can see at from line# 49-53 that I have placed your projection related code; also the MapUnit is Meter; can you test run it after corrections if any and share back?


01.using MonoTouch.UIKit;
02.using System;
03.using System.Drawing;
04.using ThinkGeo.MapSuite.Core;
05.using ThinkGeo.MapSuite.iOSEdition;
06. 
07.namespace App.iOS.Views
08.{
09.    class MapViewController2 : UIViewController
10.    {
11.        private MapView iOSMap;
12.        public override void ViewDidLoad()
13.        {
14. 
15.        base.ViewDidLoad();
16. 
17.        // Set the main view frame
18.        View.Frame = UIScreen.MainScreen.Bounds;
19.        View.BackgroundColor = UIColor.White;
20.        View.AutoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight;
21. 
22.        // Create MapView
23.        iOSMap = new MapView(View.Frame);
24.        iOSMap.MapUnit = GeographyUnit.Meter;   
25.        iOSMap.BackgroundColor = new UIColor(233, 229, 220, 200);
26.        iOSMap.ZoomLevelSet = new BingMapsZoomLevelSet();
27. 
28.        // Add ThinkGeo Location Marker. 
29.        Marker thinkGeoLocation = new Marker();
30.        thinkGeoLocation.Position = new PointShape(-28.5537, 153.5084);
31.        thinkGeoLocation.SetImage(UIImage.FromBundle("Pin"), UIControlState.Normal);
32.        MarkerOverlay markerOverlay = new MarkerOverlay();
33.        markerOverlay.Markers.Add(thinkGeoLocation);
34.        iOSMap.Overlays.Add("markerOverlay", markerOverlay);
35. 
36.        //create and setup Bing map layer
37.        BingMapsTileOverlay bingMapOverlay = new BingMapsTileOverlay("bing key here");
38.        iOSMap.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
39.        iOSMap.Overlays.Add(bingMapOverlay);
40. 
41.        string rootPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);     
42.        bingMapOverlay.MapType = BingMapsMapType.AerialWithLabels;
43.        bingMapOverlay.TileCache = new FileBitmapTileCache(rootPath + "/CacheImages", "Road");
44.        bingMapOverlay.TileCache.TileMatrix.BoundingBoxUnit = GeographyUnit.Meter;
45.        bingMapOverlay.TileCache.TileMatrix.BoundingBox = bingMapOverlay.GetBoundingBox();
46.        bingMapOverlay.TileCache.ImageFormat = TileImageFormat.Jpeg;
47. 
48.        //Code snippet by ThinkGeo Forum Support Guy Don
49.        ManagedProj4Projection wgs84ToBingProjection = new ManagedProj4Projection();
50.        wgs84ToBingProjection.InternalProjectionParametersString = ManagedProj4Projection.GetWgs84ParametersString();
51.        wgs84ToBingProjection.ExternalProjectionParametersString = ManagedProj4Projection.GetBingMapParametersString();
52.        wgs84ToBingProjection.Open();
53.        iOSMap.CurrentExtent = wgs84ToBingProjection.ConvertToExternalProjection(new RectangleShape(-33.86000, 151.219389, -32.860000, 151.209389));
54. 
55.        iOSMap.ZoomTo(iOSMap.CurrentExtent);
56. 
57.        // Add MapView to MainView
58.        View.AddSubview(iOSMap);
59.        iOSMap.Refresh();
60.             
61.        }
62.        
63.    }
64.}






Hi zeeshan, 



Sorry I just adjust the order but haven’t make sure where is the position.



The correct original extent should be: (151.209389, -32.860000, 151.219389, -33.86000). The x in parameter is longitude and the y is latitude.



Attached is the result in desktop edition and int IOS edition.











Regards,



Don




Sorry for delayed reply as I have been on holidays. Actually I had tried the above extent co-ords but could not tell you that I was still unable to display the marker as you did over a Point (e.g. Sydney). Attached is a snapshot of my MapController with some null ref error at run time. Does it help to identify what wrong is left to be corrected?

Hi zeeshan, 
  
 It looks you upload your screenshot failed. Could you please upload that again? 
  
 And I think if you met run-time error, that maybe because your version is old. You know we don’t have a officer version for IOS now, I think maybe you can try to get the latest version from where you got original version before, that should help you to solve the issue. 
  
 Regards, 
  
 Don

I have used the latest dll’s provided to me via email.

Hi zeeshan, 
  
 Please let me know whether the latest version works for you. 
  
 Regards, 
  
 Don

No, it does not work. Plz find attached code files for iOS I am using.

Testing_ThinkGeo_Map_on_iOS.zip (1.84 KB)

Hi zeeshan, 
  
 I just know our support will contact you via email for detail about it. 
  
 Regards, 
  
 Don

k. waiting…

Hi Zeeshan,



I reviewed your code and found several minor issues that might cause your issue.



1, With Bing maps as base overlay, we should set the map geography unit to match Bing maps’. So we need to use “Meter” here.
2, The marker longitude and latitude is reversed.
3, The marker location and extent are in WGS84 projection, while Bing maps is using Spherical Mercator projection, we need to convert it to match Bing maps’ projection.
4, Some code is not used, we can remove them.



Note, the specified marker location is not in the initiate extent, please tap the button on the upper right corner to zoom to the marker.




Please download the attached sample with detail comments and feel free to let us know if you have more queries.


Thanks,



Howard

ZoomToCurrentCoordinatesUsingBing.zip (8.7 KB)

Yes it works:) Now can u send the same running sample for Android?


Hi Zeeshan, 
  
 Great to hear that works on your end now. The updated Android sample package is attached in the following post. Please take a look at that. 
 thinkgeo.com/forums/MapSuite/tabid/143/aft/12167/Default.aspx 
  
 Thanks, 
 Howard