वर्तमान स्थान पर शुरू होने वाले मार्ग के साथ Google मानचित्र खोलने वाले सभी मोबाइल उपकरणों के लिए एक लिंक कैसे बनाएं, किसी दिए गए स्थान को नष्ट करना?


88

मैंने सोचा था कि यह पता लगाना इतना कठिन नहीं होगा लेकिन प्रकट रूप से यह एक बढ़िया क्रॉस डिवाइस लेख खोजना आसान नहीं है, जैसे आप उम्मीद करेंगे।

मैं एक लिंक बनाना चाहता हूं जो या तो मोबाइल डिवाइस के ब्राउज़र को खोलता है और Google मानचित्र पर सर्फ करता है या एक मैप्स ऐप (ऐप्पल मैप्स या Google मैप्स) खोलता है और सीधे एक मार्ग शुरू करता है, अर्थात: वर्तमान स्थान पर शुरू होता है, एक दिए गए बिंदु पर समाप्त होता है ( अक्षांश / देशांतर)।

मैं दो उपकरणों (ब्राउज़रस्टैक के पास), एक Android और एक iPhone पर परीक्षण कर सकता हूं।

निम्न लिंक केवल एंड्रॉइड पर काम करता है:

<a href="http://maps.google.com/maps?daddr=lat,long&amp;ll=">Take me there!</a>

IPhone के क्रोम में इस लिंक पर क्लिक करने पर, यह मोबाइल एप्लिकेशन पर विज्ञापनों के साथ डेस्कटॉप संस्करण में Google मैप्स को अजीब तरह से खोलता है ...

यह केवल iOS पर काम करता है, Apple मैप्स को खोलते हुए मुझे एक स्टार्ट लोकेशन में प्रवेश करने के लिए कहता है (मैं "करंट लोकेशन" चुन सकता हूं) और रूट - वांछित व्यवहार शुरू कर सकता हूं। इस लिंक पर क्लिक करना पूरी तरह से Android पर विफल होता है:

<a href="maps://maps.google.com/maps?daddr=lat,long&amp;ll=">Take me there!</a>

मानचित्र देखें: // प्रोटोकॉल।

क्या इस तरह के लिंक बनाने का एक सुरुचिपूर्ण क्रॉस डिवाइस तरीका है? एक लिंक जो सभी मुख्य मोबाइलों पर काम करता है?

धन्यवाद

अद्यतन: समाधान पाया (थोड़े)

यहाँ मैं के साथ आया हूँ। यह काफी नहीं है जो मैंने कल्पना की थी, हालांकि यह काम कर रहा है।

var ua = navigator.userAgent.toLowerCase(),
    plat = navigator.platform,
    protocol = '',
    a,
    href;

$.browser.device = ua.match(/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera/i) ? ua.match(/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera/i)[0] : false;


if ($.browser.device) {
    switch($.browser.device) {
        case 'iphone':
        case 'ipad':
        case 'ipod':
            function iOSversion() {
              if (/iP(hone|od|ad)/.test(navigator.platform)) {
                // supports iOS 2.0 and later: <http://bit. ly/TJjs1V>
                var v = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/);
                return [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)];
              }
            }

            var ver = iOSversion() || [0];

            if (ver[0] >= 6) {
              protocol = 'maps://';
            }
            else {
                protocol = 'http://maps.google.com/maps';
            }
        break;

        case 'android':
        default:
            protocol = 'http://maps.google.com/maps';
        break;
    }

a.attr('href', protocol + href)

maps://प्रोटोकॉल सेब के लिए url योजना नक्शे एप्लिकेशन है, जो केवल iOS 6 या बाद पर काम शुरू हो जाएगा। परीक्षण करने के तरीके हैं कि क्या gmaps स्थापित है और फिर url के साथ क्या करना है, लेकिन इसे उसी तरह से बहुत अधिक चुना गया जैसा आपने इरादा किया था। इसलिए मैंने उपरोक्त मापदंडों का उपयोग करते हुए बस एक मानचित्र बनाना शुरू किया: // या maps.google.com/ लिंक।

** अपडेट करें **

दुख की बात है, $ .browser.device jquery के बाद से काम नहीं करता है 1.9 (स्रोत - http://api.jquery.com/jquery.browser )


1
आप किस सर्वर साइड भाषा का उपयोग करते हैं? आप उपयोगकर्ता-एजेंट सूँघने के साथ इस समस्या को हल कर सकते हैं।
ऊऊओ

मुझे पता है कि मैं कर सकता था, लेकिन मैं उस क्रॉस ब्राउज़र को बनाना चाहता हूं। मेरे पास PHP और JS है
एलेक्स

@ एलेक्स - आप डेस्कटॉप पर काम करने के लिए इसका अनुवाद कैसे करेंगे? तो यह maps.google.comएंड्रॉइड और डेस्कटॉप और maps:// आईओएस पर काम करता है ।
21

@ एलेक्स - मुझे एक त्रुटि यह कहते हुए मिलती है a(अंतिम पंक्ति) अपरिभाषित है। मेरे पास infoWindow के भीतर एक URL है जिसे मुझे उपयोग किए गए डिवाइस के आधार पर बदलने की आवश्यकता है।
kaoscify

1
मैंने पाया कि किसी भी उत्तर ने वास्तव में प्लेटफ़ॉर्म का पता लगाने (ब्राउज़र नहीं) पर बहुत अच्छा काम किया, इसलिए मुझे PgwBrowser मिला , एक jQuery प्लगइन जो प्लेटफ़ॉर्म का पता लगाता है (उदाहरण के लिए डेस्कटॉप, मोबाइल), ब्राउज़र और यहां तक ​​कि ओएस भी। यह भी> 2 KB, जब संकुचित और gzipped। इसके साथ, मैं बस एक switchस्टेटमेंट में os.group चेक कर सकता हूं और तदनुसार ब्राउज़र को रूट कर सकता हूं ।
फिलोक्सो

जवाबों:


92

उह, मैंने फोन के साथ ज्यादा काम नहीं किया है, तो मुझे पता है कि अगर यह काम करेगा, लेकिन सिर्फ एक html / जावास्क्रिप्ट बिंदु से, क्या आप उपयोगकर्ता के डिवाइस के आधार पर सिर्फ एक अलग यूआरएल खोल सकते हैं?

<a style="cursor: pointer;" onclick="myNavFunc()">Take me there!</a>

function myNavFunc(){
    // If it's an iPhone..
    if( (navigator.platform.indexOf("iPhone") != -1) 
        || (navigator.platform.indexOf("iPod") != -1)
        || (navigator.platform.indexOf("iPad") != -1))
         window.open("maps://www.google.com/maps/dir/?api=1&travelmode=driving&layer=traffic&destination=[YOUR_LAT],[YOUR_LNG]");
    else
         window.open("https://www.google.com/maps/dir/?api=1&travelmode=driving&layer=traffic&destination=[YOUR_LAT],[YOUR_LNG]");
}

आपके और एलेक्स प्रेट्ज़लाव जवाब सबसे नज़दीकी हैं जो मेरे लिए काम करते हैं, लेकिन आपका निर्देशन की दिशा में अधिक जाता है कि जावास्क्रिप्ट का उपयोग करते समय यह कैसे दिख सकता है, धन्यवाद। मैं अंतिम समाधान प्रदान करने के लिए अपनी पोस्ट अपडेट करूंगा
एलेक्स

1
मैंने इसके बारे में एक साल पहले बहुत शोध किया था और आपको बता सकता हूं कि maps.apple.com/?q=Mexican+Restaurant का उपयोग करके Google पृष्ठ पर पुन: निर्देशित करेगा (इसे आज़माएं!) और अपवाद में यह एक ऐसा उपकरण है जिसमें यह है ऐप्पल मैप्स ऐप, इसके बजाय वह ऐप खोल देगा। बाकी सभी चीजों के लिए यह गूगल मैप्स ऐप / पेज को खोलेगा। इनाम pls।
वर्थि 7

विशेष रूप से आप जो खोज रहे हैं वह यह है: maps.apple.com/?daddr=San+Francisco&dirflg=d&t=h और प्रलेखन यहां है: developer.apple.com/library/content-featuredarticles/…
वर्थ 7

@ Worthy7 जाहिरा तौर पर, मैंने परीक्षण नहीं किया है, लेकिन एक Android पर maps.apple.com/* गूगल मैप्स वेबसाइट पर रीडायरेक्ट करेगा, जबकि maps.google.com/* आपको एक मूल नक्शे ऐप का चयन करने की अनुमति देगा।
जेम्स

मैं अत्यधिक नए ब्राउज़र पृष्ठ के बजाय एंड्रॉइड पर उपयोगकर्ता मानचित्र एप्लिकेशन को खोलने के लिए इस उत्तर का उपयोग करने की सलाह दूंगा !
पॉलको

23

दिलचस्प है, http://maps.apple.comलिंक सीधे ऐप्पल मैप्स में एक iOS डिवाइस पर खुलेंगे, या Google मैप्स पर रीडायरेक्ट करेंगे (जो कि तब एंड्रॉइड डिवाइस पर इंटरसेप्टेड है), इसलिए आप एक सावधानीपूर्वक URL को क्राफ्ट कर सकते हैं जो दोनों मामलों में सही काम करेगा " Apple मैप्स "URL जैसे:

http://maps.apple.com/?daddr=1600+Amphitheatre+Pkwy,+Mountain+View+CA

वैकल्पिक रूप से, आप /mapsएंड्रॉइड डिवाइस पर Google मैप्स में सीधे खोलने के लिए सीधे Google मैप्स यूआरएल ( URL घटक के बिना ) का उपयोग कर सकते हैं , या iOS डिवाइस पर Google मैप्स मोबाइल वेब में खोल सकते हैं:

http://maps.google.com/?daddr=1+Infinite+Loop,+Cupertino+CA


1
इसलिए मैंने अपना एंड्रॉइड फोन लिया, Google Chrome वेब ब्राउज़र खोला और URL दर्ज किया http://maps.google.com/। इसने इस URL को वेब ब्राउज़र में उस URL में खोला है। मुझे उम्मीद थी कि यह Google मैप्स ऐप खोल देगा । क्या आपने यहां जो लिखा, उसे एलेक्स प्रेट्ज़लाव ने गलत समझा? ;-)
सिंह

3
@Leo एंड्रॉइड यूआरएल को सीधे ब्राउजर में दर्ज करने के लिए अलग से संभालता है। एक लिंक पर क्लिक करके। अपने आप को एक Google मानचित्र URL जैसे मानचित्र s.google.com/?daddr=1600+Amphitheatre+Pkwy,+Mountain+View+CA और फिर अपने ईमेल क्लाइंट से उस पर टैप करने का प्रयास करें ।
एलेक्स प्रेट्ज़लाव

धन्यवाद @AlexPretzlav हां, उन्हें कुछ काम करना है ताकि चीजें मिल सकें। क्या कोई उभरते मानक हैं?
सिंह

1
इसे एक URL के रूप में पोस्ट करते हुए मैं अपने एंड्रॉइड मैप्स पर परीक्षण कर सकता हूं ।apple.com/?daddr=1600 + Amphitheatre + Pkwy , + Mountain + View + CA उपरोक्त URL अपने एंड्रॉइड पर Google मैप्स (वेबसाइट) पर रीडायरेक्ट करता है, जबकि maps.google.comमुझे अपने एंड्रॉइड फोन पर कई अलग-अलग दिशाओं के ऐप खोलने की अनुमति देता है।
रफेल

15

बस इस सवाल में टकराया और यहाँ पाया गया कि सभी उत्तर मैंने ऊपर दिए गए कुछ कोड्स में लिए और सरल js फ़ंक्शन बनाए जो एंड्रॉइड और आईफ़ोन पर काम करता है (यह लगभग हर एंड्रॉइड और आईफ़ोन का समर्थन करता है)।

  function navigate(lat, lng) {
    // If it's an iPhone..
    if ((navigator.platform.indexOf("iPhone") !== -1) || (navigator.platform.indexOf("iPod") !== -1)) {
      function iOSversion() {
        if (/iP(hone|od|ad)/.test(navigator.platform)) {
          // supports iOS 2.0 and later
          var v = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/);
          return [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)];
        }
      }
      var ver = iOSversion() || [0];

      var protocol = 'http://';
      if (ver[0] >= 6) {
        protocol = 'maps://';
      }
      window.location = protocol + 'maps.apple.com/maps?daddr=' + lat + ',' + lng + '&amp;ll=';
    }
    else {
      window.open('http://maps.google.com?daddr=' + lat + ',' + lng + '&amp;ll=');
    }
  }

HTML:

 <a onclick="navigate(31.046051,34.85161199999993)" >Israel</a>

10

यह मेरे लिए सभी उपकरणों [iOS, Android और Window Mobile 8.1] पर काम करता है।

किसी भी तरह से सबसे अच्छा तरीका नहीं दिखता है ... लेकिन अधिक सरल नहीं हो सकता :)

<a href="bingmaps:?cp=18.551464~73.951399">
 <a href="http://maps.apple.com/maps?q=18.551464, 73.951399"> 
   Open Maps
 </a>
</a>

http://jsbin.com/dibeq


बहुत साफ, और आसान। कई उपकरणों पर परीक्षण। चिकना काम करता है! बहुत बहुत धन्यवाद: D
lzoesch

लेकिन यह केवल सेब के नक्शे खोलता है। अगर आपके पास Android फ़ोन है तो इतना अच्छा नहीं है।
सुपरलुमिनरी

1
@ क्रिस्टोफर - और यह गूगल मैप्स ऐप खोलता है?
१४:१४

@superluminary वास्तव में यह अजीब तरह से करता है।
क्रिस्टोफर

आप निर्देशांक के बजाय एक पते में पास करने के लिए इसका उपयोग कैसे करेंगे?
विंसेंट

6
if (navigator.geolocation) { //Checks if browser supports geolocation
navigator.geolocation.getCurrentPosition(function (position) {                                                                                            
 var latitude = position.coords.latitude;                    //users current
 var longitude = position.coords.longitude;                 //location
 var coords = new google.maps.LatLng(latitude, longitude); //Creates variable for map coordinates
 var directionsService = new google.maps.DirectionsService();
 var directionsDisplay = new google.maps.DirectionsRenderer();
 var mapOptions = //Sets map options
 {
   zoom: 15,  //Sets zoom level (0-21)
   center: coords, //zoom in on users location
   mapTypeControl: true, //allows you to select map type eg. map or satellite
   navigationControlOptions:
   {
     style: google.maps.NavigationControlStyle.SMALL //sets map controls size eg. zoom
   },
   mapTypeId: google.maps.MapTypeId.ROADMAP //sets type of map Options:ROADMAP, SATELLITE, HYBRID, TERRIAN
 };
 map = new google.maps.Map( /*creates Map variable*/ document.getElementById("map"),    mapOptions /*Creates a new map using the passed optional parameters in the mapOptions parameter.*/);
 directionsDisplay.setMap(map);
 directionsDisplay.setPanel(document.getElementById('panel'));
 var request = {
   origin: coords,
   destination: 'BT42 1FL',
   travelMode: google.maps.DirectionsTravelMode.DRIVING
 };

 directionsService.route(request, function (response, status) {
   if (status == google.maps.DirectionsStatus.OK) {
     directionsDisplay.setDirections(response);
   }
 });
 });
 }

1
यह करने के लिए एक बहुत अच्छा तरीका thats, लेकिन नहीं काफी मैं क्या के लिए कहा। आईडी बल्कि केवल एक एंकर-टैग जोड़ना चाहते हैं, इससे ज्यादा कुछ नहीं। अगर इसका रूट बिना गूगल मैप बनाए संभव नहीं है, तो यह जानकर अच्छा लगेगा। वैसे भी धन्यवाद, आप एक उत्थान मिलता है!
एलेक्स

ठीक है, मुझे पता है अगर आप एक समाधान मिलता है
सुधरसून


2

अच्छी तरह से नहीं, एक iOS डेवलपर भावी से, दो लिंक हैं जो मुझे पता है कि iPhone पर मैप्स ऐप खोलेगा

IOS 5 और उससे कम पर: http://maps.apple.com?q=xxxx

IOS 6 और ऊपर: http://maps.google.com?q=xxxx

और वह केवल सफारी पर है। Chrome आपको Google मानचित्र वेबपृष्ठ पर निर्देशित करेगा।

इसके अलावा आपको एक URL योजना का उपयोग करना होगा जो मूल रूप से इस उद्देश्य को पूरा करती है क्योंकि किसी भी एंड्रॉइड को उस प्रोटोकॉल का पता नहीं होगा।

आप जानना चाह सकते हैं, क्यों सफारी मैप्स ऐप खोलती है और क्रोम मुझे एक वेबपेज पर निर्देशित करता है?

खैर, क्योंकि सफारी ऐप्पल द्वारा बनाए गए ब्राउज़र में बिल्ड है और ऊपर दिए गए URL का पता लगा सकता है। क्रोम "सिर्फ एक और ऐप" है और इसे iOS इकोसिस्टम का पालन करना चाहिए। इसके लिए एकमात्र तरीका यह है कि अन्य योजनाओं के साथ संवाद करने के लिए URL योजनाओं का उपयोग किया जाए।


3
ठीक है, जैसा कि मैंने कहा, iOS नक्शे का पता लगाता है: // प्रोटोकॉल और एंड्रॉइड मैप्स को वर्तमान स्थान के माध्यम से सीधे खोलता है लेकिन एक सामान्य Google मैप्स URL का उपयोग करता है, इसलिए आपने जो कहा है वह बिल्कुल सही नहीं है ..
एलेक्स

1

प्रलेखन के आधार पर originपैरामीटर वैकल्पिक है और यह उपयोगकर्ता के स्थान पर चूक करता है।

... Defaults to most relevant starting location, such as user location, if available. If none, the resulting map may provide a blank form to allow a user to enter the origin....

उदाहरण के लिए: https://www.google.com/maps/dir/?api=1&destination=Pike+Place+Market+Seattle+WA&travelmode=bicycling

मेरे लिए यह डेस्कटॉप, IOS और Android पर काम करता है।


1

उपयोग में प्लेटफ़ॉर्म की परवाह किए बिना URL सिंटैक्स समान है

String url = "https://www.google.com/maps/search/?api=1&query=" + latitude + ","+ 
longitude;

एंड्रॉइड या आईओएस में URL मैप्स ऐप में Google मैप्स लॉन्च करता है, यदि Google मैप्स ऐप इंस्टॉल नहीं होता है, तो URL ब्राउज़र में Google मैप्स लॉन्च करता है और अनुरोधित कार्रवाई करता है।

किसी अन्य डिवाइस पर, URL एक ब्राउज़र में Google मैप लॉन्च करता है और अनुरोधित क्रिया करता है।

आधिकारिक दस्तावेज़ के लिए यहां लिंक https://developers.google.com/maps/documentation/urls/guide है


0

मैंने पाया कि यह बोर्ड भर में काम करता है:

<a href="https://www.google.com/maps/place/1+Fake+Street,+City+Province/State>Get Directions</a>

डेस्कटॉप / लैपटॉप के लिए उपयोगकर्ता को उस नक्शे को लोड करते समय दिशाओं पर क्लिक करना होगा, लेकिन मेरे परीक्षण से सभी मोबाइल उपकरण बिना किसी कठिनाई के उस लिंक को Google मानचित्र ऐप में लोड कर देंगे।


1
लेकिन यह सवाल नहीं था :)
एलेक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.