मैप्स ऐप को प्रोग्राम को तेजी से निर्देशांक के साथ कैसे खोलें?


107

मेरे पास अक्षांश और देशांतर है जो मैं अपने मानचित्र अनुप्रयोग में खोलना चाहता हूं। मैंने यहाँ से इस कोड की कोशिश की ।

    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)

}

यह फ़ंक्शन सफलतापूर्वक नक्शे खोलता है लेकिन यह कोई पिन नहीं दिखाता है। इसके अलावा यह उपयोगकर्ता के स्थान को दर्शाता है जो मुझे नहीं चाहिए। मैं केवल अक्षांश और देशांतर के लिए मानचित्र पर एक पिन चाहता हूं।


2
इस कोड का उद्देश्य उपयोगकर्ता स्थान से लक्ष्य तक ड्राइविंग निर्देश दिखाना है। बस एक ही लक्ष्य दिखाने के लिए, MKLaunchOptionsMapCenterKey और एक एकल मानचित्र आइटम का उपयोग करें। Stackoverflow.com/questions/28427557/… देखें ।

सुझाव के लिए धन्यवाद अन्ना।
धर्मेश खेनी

जवाबों:


157

यह कोड मेरे लिए ठीक काम कर रहा है।

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)

}

तेजी से 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)
    }
}

क्या आप पुष्टि कर सकते हैं कि MKLaunchOptionsMapSpanKey विकल्प का वांछित प्रभाव है? कोई फर्क नहीं पड़ता कि मैं CLLocationDistance के लिए किस मूल्य का उपयोग करता हूं, नक्शा बहुत बारीकी से ज़ूम किया गया है।
पत्थर

2
ऐसा लगता है कि MKLaunchOptionsMapSpanKeyएक या एक से अधिक MKMapItemनक्शे में जोड़े जाने पर ध्यान नहीं दिया जाता है : stackoverflow.com/a/32484331/422288
Eneko Alonso

4
मत भूलो: आयात MapKit
jobima

5
केवल यह बताना चाहता था कि यह "अक्षांश" और "देशांतर" नहीं "अव्यक्त" और "लंबा" है, हालांकि "टुट" मजेदार है
क्रिस

2
अगर उपयोगकर्ता ने मानचित्र एप्लिकेशन को हटा दिया है तो हम उस मामले पर कैसे जांच कर सकते हैं ???
अमृत ​​तिवारी

67

यदि आप केवल उपयोगकर्ता को ड्राइविंग निर्देश देना चाहते हैं, तो यहां नवीनतम स्विफ्ट सिंटैक्स अपने सरलतम रूप में दिया गया है:

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

1
यह मेरे लिए अच्छी तरह से काम करता है, सिवाय इसके कि लॉन्च विकल्पों में कुंजी और मूल्य उलट है। होना चाहिएmapItem.openInMapsWithLaunchOptions([MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving])
कीथ

1
त्रुटियों को हल करने के लिए फ़ाइल के शीर्ष पर आयात MapKit जोड़ना सुनिश्चित करें।
जोसेफ अस्त्राहन

2
इसके अलावा स्विफ्ट 3 में अंतिम पंक्ति अब है ... mapItem.openInMaps (launchOptions: [MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving])
यूसुफ

45

आप MKMapItemवहां पासिंग आइटम के वर्ग फ़ंक्शन को कॉल कर सकते हैं , यह केवल स्रोत / गंतव्य के लिए पहले और अंतिम रूप से उपयोग करता है, यदि आप दो से अधिक आइटम पास करना चाहते हैं।

स्विफ्ट 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])

या एक्सटेंशन का उपयोग कर:

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])

हाय डिंपियाक्स! आपके उत्तर के लिए धन्यवाद, यह परीक्षण नहीं किया, लेकिन बहुत ठीक लगता है। क्या कई तरह से भेजना संभव है? किस तरह!? क्या आप मेरी मदद कर सकते हैं।
फ्रेड

@ फ्रेड हे, MapKit के साथ आप नहीं देख सकते हैं: developer.apple.com/documentation/mapkit/mkmapitem/… लेकिन आप Google मैप्स का उपयोग करके इसे प्राप्त कर सकते हैं।
डिंम्पायक्स

36

MKMapItemदृष्टिकोण ऊपर अच्छा काम करता है आप जानकारी है कि नक्शे में प्रदर्शित किया जाता है इस पर विस्तृत नियंत्रण चाहते हैं।

अन्यथा, नीचे दिया गया कोड बहुत अच्छा काम करता है:

// 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)!)

हालाँकि, ऊपर दिया गया कोड आपको जगह के कस्टम नाम में भेजने की अनुमति नहीं देता है। इसके बजाय, यह पता दिखाएगा।

उपरोक्त कोड आपको किसी भी स्रोत से नेविगेट करने की सुविधा देता है, जिसे मैं नहीं जानता कि क्या आप MKMapItem दृष्टिकोण के साथ कर सकते हैं।


4
यदि आप "saddr =" रिक्त छोड़ते हैं, तो ऐप डिफ़ॉल्ट रूप में "आपका स्थान" सेट करेगा। कुछ इस तरह "http: // maps.apple.com/maps?saddr=&daddr=(to.latitude),(to.longitude)"
Mariano Zorrilla

निर्देश उपलब्ध नहीं
Marlhex

11

यह मेरे लिए आकर्षण का काम करता है

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)

1
यह अब मुझे काम नहीं कर रहा है। मैंने "कोई निर्देश उपलब्ध नहीं है" के साथ समाप्त किया।
हेमांग

3

आप ऐप्पल मैप पर लंबे समय तक पिन दिखाने के लिए नीचे दिए गए कोड का उपयोग कर सकते हैं।

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])

1

यदि आप चाहते हैं कि कोई भी फ्रेमवर्क आयात किए बिना कुछ सरल हो तो आप केवल एक URL बना सकते हैं: https://maps.apple.com/?ll=\(latitude),\(longitude)

@ Saniel-sayi प्रतिक्रिया के समान है, लेकिन यह केवल स्थान के नक्शे के साथ भेजा जाता है, न कि नेविगेशन चीज़


बस निर्देशांक के आसपास () को हटा दें, यह उनके साथ नहीं मिलता है।
बोरिस गफुरोव

1

मुझे पता है कि सभी उत्तर पूर्ण हैं, लेकिन यहां मुझे एक उत्तर मिला है जो पेस्ट कॉपी करना आसान है और उपयोगकर्ता को ऐप्पल मैप्स, गूगल मैप और वेज़ के साथ रूटिंग करने का विकल्प भी देता है।

स्विफ्ट 5+ के साथ काम करना

https://stackoverflow.com/a/60930491/6449292

किसी की मदद कर सकते हैं ...


0

व्यावहारिक डैनियल सईदी उत्तर के लिए अद्यतन । यह उदाहरण केवल गंतव्य निर्देशांक बताने के लिए है। उपयोगकर्ता की वर्तमान स्थिति के मूल के रूप में नक्शे मिलेंगे।

let url = URL(string: "http://maps.apple.com/maps?saddr=&daddr=\(lat),\(lon)")
UIApplication.shared.open(url!)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.