1

我在创建必须将“当前位置”字符串作为源地址的 Google 地图启动链接时遇到了问题。

问题是当需要生成此链接并与某人共享时。在这种情况下,为了生成正确的链接,需要知道朋友智能手机的区域设置。

例如,以下链接仅适用于具有英语或英国语言环境的设备: http://maps.google.com/maps?saddr=Current%20Location&daddr= 32.026685,34.742092

是否有任何通用的方法来创建这样的链接,以便它可以在所有设备上工作,而不管它们的语言环境如何。

4

1 回答 1

1

问题在于saddrGoogle 地图启动链接中的参数。它必须是以下三个选项之一:

  1. 源地址
  2. 源位置 (lat,lng)
  3. “当前地址” - 告诉 Google 地图应用程序从当前位置开始的字符串。

前两个没有问题,但在大多数情况下,第三个被视为地址字符串而不是获取当前位置的命令。如果它与启动链接的电话位于相同的语言环境中,则它可以正常工作。例如,“Lieu actuel”在法语中是“当前位置”,适用于语言环境为法语的设备,但不适用于任何其他语言环境的设备(例如英语)本地的,但在大多数情况下你不是。

我的解决方案是使用帮助 HTML 页面,该页面接收目标地址/点作为 GET 参数,并生成 Google 启动链接,其中包含适当语言环境中的用户位置 pint 或“当前位置”字符串作为源地址/点

我正在使用浏览器的地理定位 api 来检索“当前位置”字符串的位置和翻译的静态数组。

这是 HTML 帮助页面的简单视觉结构:

在此处输入图像描述

这是完整的 HTML 页面代码:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

<html>
<head>
</style>
        <meta http-equiv="content-type" content="text/html;charset=iso-8859-8-i">
        <title>My Title!</title>
        <script type="text/javascript">

            function getQueryVariable(variable) {
                variable = variable.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
                var regexS = "[\\?&]" + variable + "=([^&#]*)";
                var regex = new RegExp(regexS);
                var results = regex.exec(document.URL);
                if (results == null)
                    return "";
                else
                    return decodeURIComponent(results[1].replace(/\+/g, " "));
            }



            var langArr = new Array();
            langArr["nl"] = "Huidige locatie";     
            langArr["en"] = "Current Location";    
            langArr["fr"] = "Lieu actuel";         
            langArr["de"] = "Aktueller Ort";       
            langArr["it"] = "Posizione attuale";   
            langArr["ja"] = "???";
            langArr["es"] = "Ubicacion actual";
            langArr["ar"] = "?????? ??????";     
            langArr["ca"] = "Ubicacio actual";   
            langArr["cs"] = "Soucasna poloha";    
            langArr["da"] = "Aktuel lokalitet";
            langArr["el"] = "???????? ?????????";
            langArr["en-gb"] = "Current Location";
            langArr["en-us"] = "Current Location";
            langArr["fi"] = "Nykyinen sijainti";   
            langArr["he"] = "????? ?????";        
            langArr["he-il"] = "????? ?????";     
            langArr["hr"] = "Trenutna lokacija";  
            langArr["hu"] = "Jelenlegi helyszin"   
            langArr["id"] = "Lokasi Sekarang";     
            langArr["ko"] = "?? ??";             
            langArr["ms"] = "Lokasi Semasa";      
            langArr["no"] = "Nav?rende plassering";
            langArr["pl"] = "Biezace polozenie";   
            langArr["pt"] = "Localizacao Atual";    
            langArr["pt-pt"] = "Localizacao actual"; 
            langArr["ro"] = "Loc actual";           
            langArr["ru"] = "Òåêóùåå ðàçìåùåíèå";
            langArr["ru-ru"] = "Òåêóùåå ðàçìåùåíèå";
            langArr["sk"] = "Aktualna poloha";      
            langArr["sv"] = "Nuvarande plats";      
            langArr["th"] = "???????????????";     
            langArr["tr"] = "Su Anki Yer";         
            langArr["uk"] = "Ïîòî÷íå ì³ñöå";      
            langArr["vi"] = "V? tri Hi?n t?i";  
            langArr["zh-cn"] = "????";
            langArr["zh-tw"] = "????";


            var coordinate = getQueryVariable("ll");     
            var language = window.navigator.userLanguage || window.navigator.language;
            language = language.toLowerCase();
            if (navigator.geolocation != undefined)
            {
                if  (coordinate != "")

                    navigator.geolocation.getCurrentPosition(successCallback,
                                                            errorCallback,
                                                            {maximumAge:000000});
            }

            else
            {   
                errorCallback("");
            }


            function successCallback(position) {
                if ( (navigator.userAgent.indexOf('iPhone') != -1)  || (navigator.userAgent.indexOf('iPad') != -1))
                              window.location = "comgooglemaps://?saddr=" + position.coords.latitude + "," + position.coords.longitude + "&daddr=" + coordinate;
                            else
                              window.location = "http://maps.google.com/maps?saddr=" + position.coords.latitude + "," + position.coords.longitude + "&daddr=" + coordinate;

            }



            function errorCallback(error) {
                alert("Sorry cannot determine your current location. Please select \"Current Location\" as point A in google maps");
                window.location = "http://maps.google.com/maps?saddr=" + langArr[language].replace(" ","+") + "&daddr=" + coordinate;
            }


        </script>
    </head>
    <body>
        <div STYLE="position:absolute; TOP:460px; LEFT:80px; WIDTH:370px; HEIGHT:50px" >    
            Please wait.<br/>Detecting your location...<br/>If nothing happens for long time please use the following link:
            <h3><a href="javascript:errorCallback('');">Manually launch Google Maps</a></h3>
        </div>
    </body>
</html>
  • 某些字符串无法正确传递并显示为问题。使用谷歌翻译来翻译这些。
于 2013-09-20T07:24:43.923 回答