কীভাবে মানিকস অ্যাপ্লিকেশনটি ক্রমান্বয়ে স্থানাঙ্কের সাথে প্রোগ্রামগতভাবে খুলবেন?


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 এবং একটি একক মানচিত্র আইটেম ব্যবহার করুন। স্ট্যাকওভারফ্লো . com/ প্রশ্নগুলি / ২৮৪২75৫৫57/২ দেখুন ।

আনার পরামর্শের জন্য ধন্যবাদ।
ধর্মেশ খেেনি

উত্তর:


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

আপনি কি নিশ্চিত করতে পারেন যে এমকেএলঞ্চআপশনস ম্যাপস্প্যানকি বিকল্পটিতে কাঙ্ক্ষিত প্রভাব রয়েছে? আমি CLLocationDistance এর জন্য কোন মানটি ব্যবহার করি না কেন, মানচিত্রটি খুব কাছ থেকে জুম করা হয়েছে।
পাথর

2
মনে MKLaunchOptionsMapSpanKeyহয় এক বা একাধিক MKMapItemমানচিত্রে যুক্ত করা হলে এটিকে উপেক্ষা করা হবে: stackoverflow.com/a/32484331/422288
এনেকো অ্যালোনসো

4
ভুলে যাবেন না: মানচিত্রটি আমদানি করুন
জবিমা

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
ত্রুটিগুলি সমাধানের জন্য ফাইলের শীর্ষে আমদানি করা মানককিট যুক্ত করার বিষয়টি নিশ্চিত করুন।
জোসেফ আস্ট্রাহান

2
এছাড়াও সুইফ্ট 3-এ শেষ লাইনটি এখন ... mapItem.openInMaps (প্রারম্ভিকরণসমূহ: [এমকেএলঞ্চআপশনসইপরিচালনা মোডিকে: এমকেল্যাঞ্চঅপশনসডাইমেশন মোডড্রাইভিং])
জোসেফ আস্ট্রাহান

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

হাই ডিম্পিয়াক্স! আপনার উত্তরের জন্য ধন্যবাদ, এটি পরীক্ষা করে দেখেনি তবে বেশ ঠিক আছে বলে মনে হচ্ছে। বেশ কয়েকটি ওয়ে পয়েন্ট পাঠানো কি সম্ভব? কিভাবে !? তুমি কি আমাকে সাহায্য করবে.
ফ্রেড

@ ফ্রেড ওহে, ম্যাপকিটের সাহায্যে আপনি দেখতে পারবেন না: বিকাশকারী.এপলল / ডকুমেন্টেশন / ম্যাপকিট / এমকেমাপিটেম / But তবে আপনি গুগল ম্যাপস ব্যবহার করে এটি অর্জন করতে পারেন।
ডিম্পিয়াাক্স

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

তবে উপরের কোডটি আপনাকে সেই জায়গার একটি কাস্টম নাম পাঠাতে দেয় না। পরিবর্তে, এটি ঠিকানাটি প্রদর্শন করবে।

উপরের কোডটি আপনাকে যে কোনও উত্স স্থানাঙ্ক থেকে নেভিগেট করতে দেয়, যা আমি জানি না আপনি এমকেম্যাপটাইম পদ্ধতির সাথে করতে পারেন কিনা।


4
আপনি যদি "সদর =" খালি ছেড়ে যান, অ্যাপ্লিকেশনটি "আপনার অবস্থান" কে ডিফল্ট হিসাবে সেট করবে। "Http: // map.apple.com/maps?saddr=& دادdr=(to.latitude),(to.longitude) এর মতো কিছু"
মারিয়ানো

দিকনির্দেশ উপলভ্য নয়
মার্লেহেক্স

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)

@ সানিয়েল-থেডি প্রতিক্রিয়ার অনুরূপ তবে এটি কোনও নেভিগেশন জিনিস নয়, প্রেরিত অবস্থান সহ মানচিত্রটি খুলবে


স্থানাঙ্কের চারপাশে কেবল () সরিয়ে দিন, এটি তাদের সাথে খুঁজে পাবে না।
বরিস গফুরভ

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!)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.