Arhn - архитектура программирования

Google Maps запускает ссылку с текущим местоположением в качестве исходного адреса

У меня возникла проблема с созданием ссылки для запуска карт Google, в которой в качестве адреса источника должна быть строка «Текущее местоположение».

Проблема в том, что есть необходимость сгенерировать эту ссылку и поделиться ею с кем-нибудь. В этом случае необходимо знать, где находится смартфон друга, чтобы сгенерировать правильную ссылку.

Например, следующая ссылка будет работать только на устройствах с английской или британской локалью: http://maps.google.com/maps?saddr=Current%20Location&daddr=32.026685,34.742092

Есть ли какой-нибудь универсальный способ создать такую ​​ссылку, чтобы она работала на всех устройствах независимо от их локали.


  • вы нашли решение? спрашивал то же самое :) 13.09.2013
  • На самом деле да. Скоро опубликую свое решение 17.09.2013

Ответы:


1

Проблема в параметре saddr в ссылке для запуска карт Google. Это должен быть один из трех вариантов:

  1. Исходный адрес
  2. Исходное местоположение (широта, долгота)
  3. «Текущий адрес» - строка, которая сообщает приложению Google Maps начать работу с текущего местоположения.

Первые два не являются проблемой, но третий в большинстве случаев обрабатывается как строка адреса, а не как команда для определения текущего местоположения. Он работает правильно, если он находится в той же локали, что и телефон, который запускает ссылку. Например, «Lieu actuel» означает «Текущее местоположение» на французском языке и будет работать на устройствах с французским языком, но не будет работать на устройствах с любым другим языковым стандартом (например, английский). Этот факт не может быть проблемой, если вы знаете адрес получателя. местный, но в большинстве случаев это не так.

Мое решение заключалось в использовании HTML-страницы справки, которая получает адрес / точку назначения в качестве параметра GET и генерирует ссылку для запуска Google с указанием местоположения пользователя или строкой «Текущее местоположение» в соответствующем языковом стандарте в качестве исходного адреса / точки.

Я использую 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>
  • Некоторые строки не могут быть переданы правильно и показаны в виде вопросов. Используйте Google Translate, чтобы перевести их.
20.09.2013
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..