আইওএস Program এ প্রোগ্রামের মাধ্যমে মানচিত্র অ্যাপ খুলুন


159

আইওএস to-এর আগে, ইউআরএল খোলা হলে (গুগল) মানচিত্র অ্যাপটি খুলবে:

NSURL *url = [NSURL URLWithString:@"http://maps.google.com/?q=New+York"];
[[UIApplication sharedApplication] openURL:url];

এখন নতুন অ্যাপল মানচিত্রের প্রয়োগের সাথে এটি কেবল গুগল মানচিত্রে মোবাইল সাফারিটি খুলবে। আমি কীভাবে আইওএস 6 এর সাথে একই আচরণটি সম্পাদন করতে পারি? আমি কীভাবে প্রোগ্রামে ম্যাপস অ্যাপ্লিকেশনটি খুলব এবং এটি কোনও নির্দিষ্ট অবস্থান / ঠিকানা / অনুসন্ধান / যে কোনও কিছুতে নির্দেশ করব?

উত্তর:


281

অ্যাপল অফিশিয়াল উপায় এখানে:

// Check for iOS 6
Class mapItemClass = [MKMapItem class];
if (mapItemClass && [mapItemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)]) 
{
    // Create an MKMapItem to pass to the Maps app
    CLLocationCoordinate2D coordinate = 
                CLLocationCoordinate2DMake(16.775, -3.009);
    MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:coordinate 
                                            addressDictionary:nil];
    MKMapItem *mapItem = [[MKMapItem alloc] initWithPlacemark:placemark];
    [mapItem setName:@"My Place"];
    // Pass the map item to the Maps app
    [mapItem openInMapsWithLaunchOptions:nil];
}

আপনি যদি গাড়ীটিতে ড্রাইভিং বা হাঁটার নির্দেশনা পেতে চান তবে আপনি অ্যারেতে একটি mapItemForCurrentLocationসহ অন্তর্ভুক্ত করতে পারেন এবং লঞ্চ অপশনগুলি যথাযথভাবে সেট করতে পারেন।MKMapItem+openMapsWithItems:launchOptions:

// Check for iOS 6
Class mapItemClass = [MKMapItem class];
if (mapItemClass && [mapItemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)]) 
{
    // Create an MKMapItem to pass to the Maps app
    CLLocationCoordinate2D coordinate = 
                CLLocationCoordinate2DMake(16.775, -3.009);
    MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:coordinate 
                                            addressDictionary:nil];
    MKMapItem *mapItem = [[MKMapItem alloc] initWithPlacemark:placemark];
    [mapItem setName:@"My Place"];

    // Set the directions mode to "Walking"
    // Can use MKLaunchOptionsDirectionsModeDriving instead
    NSDictionary *launchOptions = @{MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeWalking};
    // Get the "Current User Location" MKMapItem
    MKMapItem *currentLocationMapItem = [MKMapItem mapItemForCurrentLocation];
    // Pass the current location and destination map items to the Maps app
    // Set the direction mode in the launchOptions dictionary
    [MKMapItem openMapsWithItems:@[currentLocationMapItem, mapItem] 
                    launchOptions:launchOptions];
}

আপনি তার elseপরে একটি বিবৃতিতে আপনার মূল আইওএস 5 এবং নিম্ন কোড সংরক্ষণ করতে পারেন if। মনে রাখবেন যে আপনি যদি openMapsWithItems:অ্যারে আইটেমগুলির ক্রমটি বিপরীত করেন , আপনি স্থানাঙ্ক থেকে আপনার বর্তমান অবস্থানের দিকনির্দেশ পাবেন । আপনি সম্ভবত MKMapItemবর্তমান অবস্থানের মানচিত্র আইটেমের পরিবর্তে একটি বিল্ডিং পাস করে যে কোনও দুটি অবস্থানের মধ্যে দিকনির্দেশ পেতে এটি ব্যবহার করতে পারেন । আমি এটা চেষ্টা করিনি।

শেষ অবধি, আপনার যদি এমন কোনও ঠিকানা থাকে (একটি স্ট্রিং হিসাবে) যার দিকে আপনি দিকনির্দেশ চান তবে, জিওকোডারটি কোনও MKPlacemarkউপায় তৈরি করতে ব্যবহার করুন CLPlacemark

// Check for iOS 6
Class mapItemClass = [MKMapItem class];
if (mapItemClass && [mapItemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)])
{
    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    [geocoder geocodeAddressString:@"Piccadilly Circus, London, UK" 
        completionHandler:^(NSArray *placemarks, NSError *error) {

        // Convert the CLPlacemark to an MKPlacemark
        // Note: There's no error checking for a failed geocode
        CLPlacemark *geocodedPlacemark = [placemarks objectAtIndex:0];
        MKPlacemark *placemark = [[MKPlacemark alloc]
                                  initWithCoordinate:geocodedPlacemark.location.coordinate
                                  addressDictionary:geocodedPlacemark.addressDictionary];

        // Create a map item for the geocoded address to pass to Maps app
        MKMapItem *mapItem = [[MKMapItem alloc] initWithPlacemark:placemark];
        [mapItem setName:geocodedPlacemark.name];

        // Set the directions mode to "Driving"
        // Can use MKLaunchOptionsDirectionsModeWalking instead
        NSDictionary *launchOptions = @{MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeDriving};

        // Get the "Current User Location" MKMapItem
        MKMapItem *currentLocationMapItem = [MKMapItem mapItemForCurrentLocation];

        // Pass the current location and destination map items to the Maps app
        // Set the direction mode in the launchOptions dictionary
        [MKMapItem openMapsWithItems:@[currentLocationMapItem, mapItem] launchOptions:launchOptions];

    }];
}

কোডটি আইওএস for এর জন্য দুর্দান্ত কাজ করে mention উল্লেখযোগ্য যদিও আমরা যদি চাই যে রুটটি বর্তমান ব্যবহারকারীর অবস্থান থেকে কোনও গন্তব্যস্থলে পৌঁছে তবে প্রবেশ করার দরকার নেই currentLocationMapItem
ফিলিপ 7007

1
আপনি যে
টোম্বাক্টু

এটি কেবলমাত্র আইওএস 6 6 এবং আপনার
ফ্যালব্যাকের

2
আমি কীভাবে মানচিত্র অ্যাপ্লিকেশনগুলি থেকে আমার বর্তমান অ্যাপ্লিকেশনটিতে নেভিগেট করতে পারি?
অ্যাপল

1
আমি যখন অ্যাপল মানচিত্র অ্যাপ্লিকেশন খুলি তখন এটি কী অবস্থান নির্বাচন করে তা সতর্কতা দেখায় "এই অবস্থানগুলির মধ্যে আইওএস 6" এর মধ্যে দিকনির্দেশ পাওয়া যায়নি এবং এরপরে কিছুই করছে না? যে কোনও সহায়তা
ন্যাক্সির

80

আমার নিজের প্রশ্নের উত্তর খুঁজে পেয়েছি। অ্যাপল তার মানচিত্রের ইউআরএল ফর্ম্যাটটি এখানে ডকুমেন্ট করে । দেখে মনে হচ্ছে আপনি মূলত প্রতিস্থাপন করতে পারেন maps.google.comসঙ্গে maps.apple.com

আপডেট: দেখা যাচ্ছে যে আইওএস 6 এ মোবাইলসফারিতে একই কথা রয়েছে; http://maps.apple.com/?q=...সেই অনুসন্ধানের সাথে একইভাবে মানচিত্র অ্যাপ্লিকেশনটি খোলার জন্য একটি লিঙ্ক আলতো চাপছেhttp://maps.google.com/?q=... পূর্ববর্তী সংস্করণগুলিতে হয়েছিল। এটি উপরে লিঙ্ক করা পৃষ্ঠায় কাজ করে এবং ডকুমেন্টেড হয়।

আপডেট: এটি ইউআরএল ফর্ম্যাট সম্পর্কিত আমার প্রশ্নের উত্তর দেয়। তবে নেভান রাজার উত্তর এখানে (নীচে দেখুন) আসল মানচিত্রের এপিআইয়ের একটি দুর্দান্ত সংক্ষিপ্তসার।


1
মজাদার. আপনি যদি মানচিত্র.এপ্লে.কম.এতে কোনও ব্রাউজার খুলেন তবে এটি মানচিত্র.google.com এ পুনর্নির্দেশ করে। আমি অবাক হই যে এই কত দিন চলবে?
pir800

@ পির ৮০০ - আমি আসলেই ভাবছিলাম যে আপনি আইওএস-এ সাফারিতে মানচিত্র.এপল.কম.এর লিঙ্কটি ট্যাপ করেন তবে কী হবে তা নিয়ে আমি ভাবছিলাম I আমি এটি চেষ্টা করেছিলাম এবং আপনি যখন ট্যাপ করেছিলেন তখন এটি পূর্ববর্তী আইওএস সংস্করণে যেমন হয়েছিল ঠিক তেমনই মানচিত্রে যায় goes map.google.com.com এ একটি লিঙ্ক। আমি মনে করি এটি একটি ভাল বাজি যে তারা গুগল মানচিত্রে পুনর্নির্দেশ করছে যাতে ওয়েবসাইট লেখকরা কেবল ম্যাপের লিঙ্কগুলিতে নির্দেশ করতে পারে অ্যাপ্লিকেশন.কম এবং মানচিত্রে আইওএস এ কাজ করতে পারে তবে অন্যান্য সমস্ত ক্লায়েন্টের উপর সাধারণত কাজ করে। তবে আমি যাচাই করতে চাই যে কোনওভাবে আমার সমস্ত মানচিত্রের লিঙ্কগুলি মানচিত্র.এপল.কম.এর দিকে চিহ্নিত করার আগে পরিবর্তন করা উচিত!
টম হামিং

@ pir800 - আমার জন্যে, খোলার maps.apple.com একটি ব্রাউজারে আমাকে লাগে apple.com/ios/maps । আমার আগের মন্তব্যটি ইচ্ছুক চিন্তাভাবনা।
টম হামিং

আমি বোঝাতে চাইছি আপনি যদি কোনও ঠিকানা জিজ্ঞাসা করতে বা সমন্বয় করার চেষ্টা করেন। Map.apple.com/?q=los অ্যাঞ্জেলস, সিএ চেষ্টা করুন। আপনি এটি আপনার ডেস্কটপ মেশিনে খুলতে পারেন এবং এটি
মানচিত্র.google.com

সেই ক্যোয়ারিতে ট্রানজিট মোড যুক্ত করার কোনও উপায় আছে কি? (হাঁটা / চালনা) ওয়েবে এটির কোনও উল্লেখ খুঁজে পাওয়া যায়নি।
লিরিক

41

এটি করার সর্বোত্তম উপায় হ'ল নতুন আইওএস 6 পদ্ধতিটি কল করা MKMapItem openInMapsWithLaunchOptions:launchOptions

উদাহরণ:

CLLocationCoordinate2D endingCoord = CLLocationCoordinate2DMake(40.446947, -102.047607);
MKPlacemark *endLocation = [[MKPlacemark alloc] initWithCoordinate:endingCoord addressDictionary:nil];
MKMapItem *endingItem = [[MKMapItem alloc] initWithPlacemark:endLocation];

NSMutableDictionary *launchOptions = [[NSMutableDictionary alloc] init];
[launchOptions setObject:MKLaunchOptionsDirectionsModeDriving forKey:MKLaunchOptionsDirectionsModeKey];

[endingItem openInMapsWithLaunchOptions:launchOptions];

এটি বর্তমান অবস্থান থেকে গাড়ি চালনার জন্য নেভিগেশন শুরু করবে।


1
ঠিক আছে, সুতরাং MKMapItemযখন আমার সমস্ত কিছু একটি ঠিকানা হয় তার উদাহরণ পাওয়ার সহজতম উপায় কী ? এই এপিআইটি সেই সাধারণ ব্যবহারের ক্ষেত্রে কিছুটা জটিল বলে মনে হচ্ছে।
টম হামিং

এমকেপ্লেসমার্ক * শেষ অবস্থান = [[এমকেপ্লেসমার্ক বরাদ্দ] initWithCoordinate: শোধন ঠিকানা: আপনার অ্যাড্রেসডিক্ট হিয়ার]; আপনি একজন
অ্যাড্রেস ডিক্টোনারি

7

আমি আপনাকে মানচিত্রগুলি দেখতে পেয়েছি le এটি একটি ভাল পছন্দ কারণ এটি স্বয়ংক্রিয়ভাবে পুরানো ডিভাইসগুলি map.google.com.com এ পুনর্নির্দেশ করবে। তবে আইওএস 6 এর জন্য একটি নতুন শ্রেণি রয়েছে যা আপনি নিতে চাইতে পারেন: এমকেম্যাপটাইম

দুটি বিষয় যা আপনার পক্ষে আগ্রহী:

  1. -openInMapsWithLaunchOptions: - এটি মানচিত্র.এপ্পে খোলার জন্য একটি এমকেপ্যাপ আইটেমটিতে কল করুন
  2. + ওপেনম্যাপস উইথটাইমস: লঞ্চঅ্যাপশন: - এমকেপ্যাপ আইটেমের উদাহরণগুলির একটি অ্যারে খোলার জন্য এটি এমকেম্যাপটাইম ক্লাসে কল করুন।

এটি দরকারী মনে হচ্ছে। তবে এটি ব্যবহার করাও কিছুটা জটিল বলে মনে হচ্ছে; আপনি করতে হবে init MKMapItemএকটি সঙ্গে MKPlacemark, যা আপনি একটি অক্ষাংশ / দ্রাঘিমাংশ যুগল এবং একটি ঠিকানা অভিধান প্রদানের মাধ্যমে পেতে। খোলার জন্য সহজ মনে হচ্ছে http://maps.apple.com/?q=1+infinite+loop+cupertino+ca। আপনি MKMapItemযখন যা করতে চান সেগুলি যখন মানচিত্রে কোনও ঠিকানা দেখায় তখন ব্যবহার করার কোনও সুবিধা আছে ?
টম হামিং

আপনার MKMapItemযদি ইতিমধ্যে আপনি ব্যবহার করতে চান এমন কোনও রেফারেন্স না থাকে তবে আপনাকে একটি আরম্ভ করতে হবে না। শুধু, বর্গ পদ্ধতি ব্যবহার +openMapsWithItems:launchOptions:উপর MKMapItemএকই জিনিস না।
অ্যাডামস

@ মার্ক অ্যাডামস যে ক্লাস পদ্ধতিটি ক্লাসের উদাহরণগুলির একটি অ্যারে নেয়, তাই হ্যাঁ তাকে কমপক্ষে একটি আরম্ভ করা দরকার।
ফিলিপ রেডেলিক

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

5
@ মিঃ জেফারসন এম কে ম্যাপটাইম
ম্যাট

5

সুইভেনে নেভান রাজার সমাধানটি সম্পূর্ণরূপে ব্যবহার করে এখানে একটি শ্রেণী রয়েছে:

class func openMapWithCoordinates(theLon:String, theLat:String){

            var coordinate = CLLocationCoordinate2DMake(CLLocationDegrees(theLon), CLLocationDegrees(theLat))

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

4

আমি বিরক্তিকর অবস্থায় দেখতে পেলাম যে http://maps.apple.com?q= ... লিঙ্ক সেটআপটি পুরানো ডিভাইসে প্রথমে সাফারি ব্রাউজারটি খোলে।

সুতরাং কোনও আইওএস 5 ডিভাইসের জন্য আপনার অ্যাপ্লিকেশনটি খোলার জন্য মানচিত্র.এপল.কম.এর একটি রেফারেন্স সহ পদক্ষেপগুলি দেখতে পাবেন:

  1. আপনি অ্যাপ্লিকেশনটিতে কিছু ক্লিক করেন এবং এটি মানচিত্র.এপল.কম.র url বোঝায়
  2. সাফারি লিঙ্কটি খোলে
  3. মানচিত্র.এপল.কম সার্ভার মানচিত্রের জিএসএল ইউআরএলে পুনঃনির্দেশ করে
  4. map.google.com ইউআরএল ব্যাখ্যা করে এবং গুগল ম্যাপস অ্যাপ্লিকেশনটি খুলবে।

আমি মনে করি যে 2 এবং 3 এর (খুব স্পষ্ট এবং বিভ্রান্তিকর) পদক্ষেপগুলি ব্যবহারকারীদের বিরক্ত করছে। অতএব আমি ওএস সংস্করণটি যাচাই করি এবং ডিভাইসগুলিতে মানচিত্র.google.com বা map.apple.com চালিত করি (শ্রদ্ধার জন্য ios 5 বা ios 6 OS সংস্করণ)।


আমিও তাই করছি। সেরা পদ্ধতির মত মনে হচ্ছে।
টম হামিং

3

এই বিষয়ে আমার গবেষণা আমাকে নিম্নলিখিত সিদ্ধান্তে নিয়ে গেছে:

  1. যদি আপনি map.google.com ব্যবহার করেন তবে এটি প্রতিটি আইওএসের জন্য সাফারিটিতে মানচিত্রটি খুলবে।
  2. আপনি যদি map.apple.com ব্যবহার করেন তবে এটি আইওএস 6 এর মানচিত্র প্রয়োগে মানচিত্রটি খুলবে এবং আইওএস 5 সহ গ্রেট কাজ করবে এবং আইওএস 5-এ এটি সাফারিতে মানচিত্রটিকে সাধারণ হিসাবে খুলবে।

3

আপনি যদি পরিবর্তে গুগল মানচিত্র খুলতে চান (বা একটি মাধ্যমিক বিকল্প হিসাবে অফার), আপনি এখানে ডকুমেন্টেড comgooglemaps://এবং comgooglemaps-x-callback://ইউআরএল স্কিমগুলি ব্যবহার করতে পারেন ।


3

ইউআরএল চালু করার আগে ইউআরএল থেকে যে কোনও বিশেষ অক্ষর মুছে ফেলুন এবং স্পেসগুলি + দ্বারা প্রতিস্থাপন করুন। এটি আপনাকে কিছু মাথাব্যথা বাঁচাতে পারে:

    NSString *mapURLStr = [NSString stringWithFormat: @"http://maps.apple.com/?q=%@",@"Limmattalstrasse 170, 8049 Zürich"];

    mapURLStr = [mapURLStr stringByReplacingOccurrencesOfString:@" " withString:@"+"];
    NSURL *url = [NSURL URLWithString:[mapURLStr stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]];
    if ([[UIApplication sharedApplication] canOpenURL:url]){
            [[UIApplication sharedApplication] openURL:url];
        }

2
NSString *address = [NSString stringWithFormat:@"%@ %@ %@ %@"
                             ,[dataDictionary objectForKey:@"practice_address"]
                             ,[dataDictionary objectForKey:@"practice_city"]
                             ,[dataDictionary objectForKey:@"practice_state"]
                             ,[dataDictionary objectForKey:@"practice_zipcode"]];


        NSString *mapAddress = [@"http://maps.apple.com/?q=" stringByAppendingString:[address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

        NSLog(@"Map Address %@",mapAddress);

        [objSpineCustomProtocol setUserDefaults:mapAddress :@"webSiteToLoad"];

        [self performSegueWithIdentifier: @"provider_to_web_loader_segue" sender: self];

// VKJ


2

@ পিজেমারি মালাউফের উত্তরের ভিত্তিতে সুইফট 4 এ আপডেট হয়েছে:

private func navigateUsingAppleMaps(to coords:CLLocation, locationName: String? = nil) {
    let placemark = MKPlacemark(coordinate: coords.coordinate, addressDictionary:nil)
    let mapItem = MKMapItem(placemark: placemark)
    mapItem.name = locationName
    let launchOptions = [MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving]
    let currentLocationMapItem = MKMapItem.forCurrentLocation()

    MKMapItem.openMaps(with: [currentLocationMapItem, mapItem], launchOptions: launchOptions)
}

1

মানচিত্রগুলি ব্যবহার না করে, কেবল প্রোগ্রামিকভাবে একটি ইউআইবাটন ক্রিয়া ব্যবহার করে, এটি আমার পক্ষে দুর্দান্ত কাজ করেছে।

// Button triggers the map to be presented.

@IBAction func toMapButton(sender: AnyObject) {

//Empty container for the value

var addressToLinkTo = ""

//Fill the container with an address

self.addressToLinkTo = "http://maps.apple.com/?q=111 Some place drive, Oak Ridge TN 37830"

self.addressToLinkTo = self.addressToLinkTo.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!

let url = NSURL(string: self.addressToLinkTo)
UIApplication.sharedApplication().openURL(url!)

                }

আপনি এই কোডটির কিছুটা ছড়িয়ে দিতে পারেন। উদাহরণস্বরূপ, আমি ভেরিয়েবলটিকে একটি শ্রেণির স্তর ভেরিয়েবল হিসাবে রেখেছি, অন্য একটি ফাংশন এটি পূরণ করতে পেরেছিলাম, এবং তারপরে বোতামটি চাপলে কেবল ভেরিয়েবলের মধ্যে যা ছিল তা নিয়ে যায় এবং এটি কোনও ইউআরএল ব্যবহার করতে স্ক্রাবড করা হয়।

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