2013-03-07 19 views
5

Mam współrzędne szerokości i długości geograficznej, na których chciałbym skupić się na mapie. Są one przechowywane jako NSStrings i przekształca się w miejscach poniżej:Focus MKMapView na NSString Współrzędne z MKCoordinateRegion

NSString *placeLatitude = [elementCoords objectForKey:@"placeLatitude"]; 
NSString *placeLongitude = [elementCoords objectForKey:@"placeLongitude"]; 

CLLocationCoordinate2D location; 
location.latitude = [placeLatitude doubleValue]; 
location.longitude = [placeLongitude doubleValue]; 

Jak zmodyfikować poniżej, aby nie koncentrować się na aktualnej lokalizacji użytkownika, ale na szerokości i długości geograficznej podane powyżej?

MKCoordinateRegion mapRegion; 
mapRegion.center = mapView.userLocation.coordinate; 
mapRegion.span.latitudeDelta = 0.05; 
mapRegion.span.longitudeDelta = 0.05; 

Odpowiedz

5

użyłbym setCenterCoordinate:animated: w celu przesunięcia punktu na mapie ostrości. Jeśli ładujesz pogląd i chcą mieć od razu ustawiony w odpowiednim miejscu, ustaw animated:NO, w przeciwnym razie, jeśli chcesz, aby przesunąć mapę, aby płynnie wyśrodkować na location następnie ustawić animated:YES

[mapView setCenterCoordinate:location animated:YES];

Oczywiście , nie zmieni to poziomu powiększenia widoku mapy. Jeśli chcesz zaktualizować poziom powiększenia, powinieneś użyć setRegion:animated:. Na przykład, jeśli chcesz, aby powiększyć dwukrotnie blisko:

// Halve the width and height in the zoom level. 
// If you want a constant zoom level, just set .longitude/latitudeDelta to the 
// constant amount you would like. 
// Note: a constant longitude/latitude != constant distance depending on distance 
//  from poles or equator. 
MKCoordinateSpan span = 
    { .longitudeDelta = mapView.region.span.longitudeDelta/2, 
     .latitudeDelta = mapView.region.span.latitudeDelta/2 }; 

// Create a new MKMapRegion with the new span, using the center we want. 
MKCoordinateRegion region = { .center = location, .span = span }; 
[mapView setRegion:region animated:YES]; 
+0

Awesome - jak ustawić poziom powiększenia? – Brandon

+0

Zaktualizowałem moją odpowiedź, daj mi znać, jeśli składnia C do tworzenia struktury ma jakieś problemy i mogę zaktualizować ją za pomocą mniejszej wbudowanej wersji. Ten kod został napisany przy użyciu kompilatora wywoływanego przez mózg :) –

+0

Bah, próbowałem skompilować w Xcode i zorientowałem się, że moja wbudowana definicja struct nie powiodła się, zaktualizowałem moją odpowiedź jeszcze raz :) –

0

Nie ustawiono bieżącej lokalizacji użytkownika jako centrum mapyRegion. Musisz ustawić swój współrzędnych jako lokalizacji w centrum mapa

+0

Dzięki, wszelkie zalecenia dotyczące sposobu konwersji, co mam do pojedyncza współrzędna, której można użyć w tym celu? – Brandon

+0

Weź obiekt CLLocation i ustaw jego współrzędne.latitude i coordinate.longitude. –

+0

Czy możesz dodać przykład do swojej odpowiedzi :) – Brandon

8
MKCoordinateRegion region; 
    CLLocation *locObj = [[CLLocation alloc] initWithCoordinate:CLLocationCoordinate2DMake([placeLatitude doubleValue], [placeLongitude doubleValue]) 
                altitude:0 
             horizontalAccuracy:0 
              verticalAccuracy:0 
                timestamp:[NSDate date]]; 
    region.center = locObj.coordinate; 
    MKCoordinateSpan span; 
    span.latitudeDelta = 1; // values for zoom 
    span.longitudeDelta = 1; 
    region.span = span; 
    [self.mapView setRegion:region animated:YES]; 
+0

Witam, otrzymuję garść błędów: nie można przydzielić statycznie, szerokość właściwości nie została znaleziona w kolokacji obiektów ... wszelkie pomysły – Brandon

+0

zaktualizowałem moją odpowiedź teraz sprawdź .. – BhushanVU

+0

Zamknij - uzyskanie oczekiwanego błędu identyfikatora przy znaczniku czasu: zero linii – Brandon

0
CLLocationCoordinate2D location; 
location.latitude = [[[matchingItems objectAtIndex:j] valueForKey:@"latitude"] doubleValue]; 
location.longitude = [[[matchingItems objectAtIndex:j] valueForKey:@"longitude"] doubleValue]; 

MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance (location, 2000, 2000); 
[mywebView setRegion:region animated:YES]; 
0

zaktualizowana SWIFT 3

let span = MKCoordinateSpan(latitudeDelta: mapView.region.span.latitudeDelta/2, longitudeDelta: mapView.region.span.latitudeDelta/2) 

     // Create a new MKMapRegion with the new span, using the center we want. 
     let region = MKCoordinateRegion(center: location, span: span) 

     mapView.setRegion(region, animated: true) 
Powiązane problemy