Kye
Kye

Reputation: 6269

How to set Monotouch map between two points

How can I center a map between two points? Sort of like when the native map application generates directions between location A and location B. I'm got a start coordinate and an end coordinate and I'll like to show two pins. I can place the pins in place, but I'm not sure how to set the center of the map.

Do I need to find the math to work out the exact distance from the points and set the map to that location? Is there a built in function for this?

this.currentMapView.SetCenterCoordinate (annotation.Coordinate, true);

Upvotes: 1

Views: 671

Answers (2)

Mahesh
Mahesh

Reputation: 2757

Taken from: http://codisllc.com/blog/zoom-mkmapview-to-fit-annotations/

BasicMapAnnotation is inherit class from MKAnnotation

private void GetRegion(MKMapView mapView)
        {
            var userWasVisible = mapView.ShowsUserLocation;
            mapView.ShowsUserLocation = false; // ignoring the blue blip
// start with the widest possible viewport
            var tl = new CLLocationCoordinate2D(-90, 180); // top left
            var br = new CLLocationCoordinate2D(90, -180); // bottom right
            foreach (var an in mapView.Annotations)
            {
                // narrow the viewport bit-by-bit
                CLLocationCoordinate2D coordinate = ((BasicMapAnnotation) an).Coordinate;
                tl.Longitude = Math.Min(tl.Longitude, coordinate.Longitude);
                tl.Latitude = Math.Max(tl.Latitude, coordinate.Latitude);
                br.Longitude = Math.Max(br.Longitude, coordinate.Longitude);
                br.Latitude = Math.Min(br.Latitude, coordinate.Latitude);
            }
            var center = new CLLocationCoordinate2D
                             {
                                 // divide the range by two to get the center
                                 Latitude = tl.Latitude - (tl.Latitude - br.Latitude)*0.5
                                 ,
                                 Longitude = tl.Longitude + (br.Longitude - tl.Longitude)*0.5
                             };
            var span = new MKCoordinateSpan
                           {
                               // calculate the span, with 20% margin so pins aren’t on the edge
                               LatitudeDelta = Math.Abs(tl.Latitude - br.Latitude)*1.2
                               ,
                               LongitudeDelta = Math.Abs(br.Longitude - tl.Longitude)*1.2
                           };
            var region = new MKCoordinateRegion {Center = center, Span = span};
            region = mapView.RegionThatFits(region); // adjusts zoom level too
            mapView.SetRegion(region, true); // animated transition
            mapView.ShowsUserLocation =

userWasVisible; } } ``

Upvotes: 1

Dimitris Tavlikos
Dimitris Tavlikos

Reputation: 8170

Calculating the midpoint between two coordinates needs a simple formula. For example, let's say you have two coordinates: (x1,y1) and (x2,y2).

Their midpoint coordinate is: ( (x1+x2)/2, (y1+y2)/2 ).

So for example, in map coordinates, let's say you have the following start/end points:

a. long: 40, lat: 39 b. long: 41, lat: 38

Their midpoint coordinate is: ( (40+41)/2, (39+38)/2 ) = (40.5, 38.5) So you set the map view's center coordinate to the outcome of this formula.

I am not aware of a built-in function for calculating this.

Upvotes: 1

Related Questions