open google ios swift apple-maps

ios - google - ¿Cómo abrir la aplicación de mapas mediante programación con coordenadas en Swift?



open google maps swift (6)

El enfoque MKMapItem anterior funciona muy bien si desea un control granular sobre la información que se muestra en Maps.

De lo contrario, el siguiente código también funciona muy bien:

// Open and show coordinate let url = "http://maps.apple.com/maps?saddr=/(coord.latitude),/(coord.longitude)" UIApplication.shared.openURL(URL(string:url)!) // Navigate from one coordinate to another let url = "http://maps.apple.com/maps?saddr=/(from.latitude),/(from.longitude)&daddr=/(to.latitude),/(to.longitude)" UIApplication.shared.openURL(URL(string:url)!)

Sin embargo, el código anterior no le permite enviar un nombre personalizado del lugar. En cambio, mostrará la dirección.

El código anterior también le permite navegar desde cualquier coordenada fuente, lo que no sé si puede hacer con el enfoque MKMapItem.

Tengo latitud y longitud que quiero abrir en mi aplicación de mapas. Probé este código desde HERE .

func goToMap(){ var lat1 : NSString = self.venueLat var lng1 : NSString = self.venueLng var latitude:CLLocationDegrees = lat1.doubleValue var longitude:CLLocationDegrees = lng1.doubleValue var coordinate = CLLocationCoordinate2DMake(latitude, longitude) var placemark : MKPlacemark = MKPlacemark(coordinate: coordinate, addressDictionary:nil) var mapItem:MKMapItem = MKMapItem(placemark: placemark) mapItem.name = "Target location" let launchOptions:NSDictionary = NSDictionary(object: MKLaunchOptionsDirectionsModeDriving, forKey: MKLaunchOptionsDirectionsModeKey) var currentLocationMapItem:MKMapItem = MKMapItem.mapItemForCurrentLocation() MKMapItem.openMapsWithItems([currentLocationMapItem, mapItem], launchOptions: launchOptions) }

Esta función abre correctamente los mapas pero no muestra ningún pin. También muestra la ubicación del usuario que no quiero. Solo quiero un pin en el mapa para la latitud y longitud proporcionadas.


Este código está funcionando bien para mí.

func openMapForPlace() { let lat1 : NSString = self.venueLat let lng1 : NSString = self.venueLng let latitude:CLLocationDegrees = lat1.doubleValue let longitude:CLLocationDegrees = lng1.doubleValue let regionDistance:CLLocationDistance = 10000 let coordinates = CLLocationCoordinate2DMake(latitude, longitude) let regionSpan = MKCoordinateRegionMakeWithDistance(coordinates, regionDistance, regionDistance) let options = [ MKLaunchOptionsMapCenterKey: NSValue(MKCoordinate: regionSpan.center), MKLaunchOptionsMapSpanKey: NSValue(MKCoordinateSpan: regionSpan.span) ] let placemark = MKPlacemark(coordinate: coordinates, addressDictionary: nil) let mapItem = MKMapItem(placemark: placemark) mapItem.name = "/(self.venueName)" mapItem.openInMapsWithLaunchOptions(options) }

Para swift 3.0:

import UIKit import MapKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() openMapForPlace() } func openMapForPlace() { let latitude: CLLocationDegrees = 37.2 let longitude: CLLocationDegrees = 22.9 let regionDistance:CLLocationDistance = 10000 let coordinates = CLLocationCoordinate2DMake(latitude, longitude) let regionSpan = MKCoordinateRegionMakeWithDistance(coordinates, regionDistance, regionDistance) let options = [ MKLaunchOptionsMapCenterKey: NSValue(mkCoordinate: regionSpan.center), MKLaunchOptionsMapSpanKey: NSValue(mkCoordinateSpan: regionSpan.span) ] let placemark = MKPlacemark(coordinate: coordinates, addressDictionary: nil) let mapItem = MKMapItem(placemark: placemark) mapItem.name = "Place Name" mapItem.openInMaps(launchOptions: options) } }


Esto funciona como un encanto para mi

let coordinate = CLLocationCoordinate2DMake(theLatitude, theLongitude) let region = MKCoordinateRegionMake(coordinate, MKCoordinateSpanMake(0.01, 0.02)) let placemark = MKPlacemark(coordinate: coordinate, addressDictionary: nil) let mapItem = MKMapItem(placemark: placemark) let options = [ MKLaunchOptionsMapCenterKey: NSValue(mkCoordinate: region.center), MKLaunchOptionsMapSpanKey: NSValue(mkCoordinateSpan: region.span)] mapItem.name = theLocationName mapItem.openInMaps(launchOptions: options)


Puede llamar a la función de clase de MKMapItem pasando elementos allí, solo usa primero y último para origen / destino de manera apropiada, si desea pasar más de dos elementos.

Swift 5, 4

let source = MKMapItem(placemark: MKPlacemark(coordinate: CLLocationCoordinate2D(latitude: lat, longitude: lng))) source.name = "Source" let destination = MKMapItem(placemark: MKPlacemark(coordinate: CLLocationCoordinate2D(latitude: lat, longitude: lng))) destination.name = "Destination" MKMapItem.openMaps(with: [source, destination], launchOptions: [MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving])

o usando la extensión:

extension MKMapItem { convenience init(coordinate: CLLocationCoordinate2D, name: String) { self.init(placemark: .init(coordinate: coordinate)) self.name = name } } let source = MKMapItem(coordinate: .init(latitude: lat, longitude: lng), name: "Source") let destination = MKMapItem(coordinate: .init(latitude: lat, longitude: lng), name: "Destination") MKMapItem.openMaps( with: [source, destination], launchOptions: [MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving])


Puede usar el siguiente código para mostrar el PIN en lat, en el mapa de Apple.

let coordinates = CLLocationCoordinate2DMake(-37.848854,144.990295) let regionSpan = MKCoordinateRegionMakeWithDistance(coordinates, 1000, 1000) let placemark = MKPlacemark(coordinate: coordinates, addressDictionary: nil) let mapItem = MKMapItem(placemark: placemark) mapItem.name = “Desired place” mapItem.openInMaps(launchOptions:[ MKLaunchOptionsMapCenterKey: NSValue(mkCoordinate: regionSpan.center) ] as [String : Any])


Si solo desea dar instrucciones de manejo al usuario, aquí está la última sintaxis de Swift en su forma más simple:

let coordinate = CLLocationCoordinate2DMake(theLatitude,theLongitude) let mapItem = MKMapItem(placemark: MKPlacemark(coordinate: coordinate, addressDictionary:nil)) mapItem.name = "Target location" mapItem.openInMaps(launchOptions: [MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeDriving])