• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Lokalizator - google map

Object Storage Arubacloud
0 głosów
433 wizyt
pytanie zadane 25 listopada 2016 w HTML i CSS przez Bartek Nowicjusz (230 p.)
edycja 25 listopada 2016 przez Bartek

Witam serdecznie.

Otóż jestem początkującym programistą w trakcie nauki. W chwili obecnej bawię się geolokalizacją ale nie do końca mi wychodzi. Napisałem prosty skrypt, który przedstawia moją długość i szerokość geograficzną, a także mierzy odległość od mojej lokalizacji do głównej siedziby Helionu (uczę się przy pomocy książki tegoż wydawnictwa).
Nie mniej jednak w dalszych częściach książki to zadanie się rozwija o przedstawienie mapy ale niestety pomimo dobrze opisanej zasady działania moja mapa się nie pokazuje i nie wyświetlają się żadne błędy i nie wiem co dalej z tym zrobić. Wiem że temat był już poruszany ale niestety nie pomógł mi zbytnio.

Poniżej przedstawiam mój kod w JavaSctript, który powinien działać, a nie działa :(
Proszę o pomoc 

window.onload = getMyLocation;

//Funkcja która pyta użytkownika o pozwolenie na włączenie lokalizacji
function getMyLocation() {
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(displayLocation, displayError);
    } else {
        alert("Oj! Brak wspracia dla geolokalizacji.");
    }
}
//Funkcja która wyświetla błędy podczas próby lokalizowania
function displayError(error) {
    var errorTypes = {
        0: "Nieznany błąd",
        1: "Dostęp zabroniony przez użytkownika",
        2: "Położenie jest niedostępne",
        3: "Zbyt długi czas oczekiwania"
    };
    var errorMessage = errorTypes[error.code];
    if (error.code === 0 || error.code === 2) {
        errorMessage = errorMessage + " " + error.message;
    }
    var div = document.getElementById("location");
    div.innerHTML = errorMessage;
}

//Określam długość i szerokość geograficzną siedziby HELIONU
var ourCoords = {
    latitude: 50.288962, //szerokość geograficzna
    longitude: 18.659609 //długość geograficzna
};
//Funkcja obliczająca odległość między punketam A i punktem B (w tym przypadku odległość między mną, a siedzibą HELIONU)
//startCoords - jest to punkt startowy
//destCoords - jest to punkt ko�cowy
function computeDistance(startCoords, destCoords) {
    var startLatRads = degreesToRadians(startCoords.latitude);
    var startLongRads = degreesToRadians(startCoords.longitude);
    var destLatRads = degreesToRadians(destCoords.latitude);
    var destLongRads = degreesToRadians(destCoords.longitude);

    var Radius = 6371; //Promień Ziemi w kilometrach
    var distance = Math.acos(Math.sin(startLatRads) * Math.sin(destLatRads) +
            Math.cos(startLatRads) * Math.cos(destLatRads) *
            Math.cos(startLongRads - destLongRads)) * Radius;

    return distance;
}
function degreesToRadians(degrees) {
    var radians = (degrees * Math.PI) / 180;
    return radians;
}
//Tutaj zaczyna się tworzenie mapy
var map;
var google;
function showMap(coords) {
    var googleLatAndLong = new google.maps.LatLng(coords.latitude, coords.longitude); // przekazuje dlugość i szerokość geograficzną do google maps
    var mapOptions = {
        zoom: 10, // ustawiam zoom mapy
        center: googleLatAndLong, // wyśrodkowanie mapy w mojej okolicy
        mapTypeId: google.maps.MapTypeId.ROADMAP //ustawiam typ mapy w tym przypadku mapa drogowa (można skorzystać także z: SATELLITE i HYBRID)
    };
    var mapDiv = document.getElementById("map");
    map = new google.maps.Map(mapDiv, mapOptions);
}
//Funkcja określająca naszą pozycję
function displayLocation(position) {
    var latitude = position.coords.latitude;//szerokość geograficzna
    var longitude = position.coords.longitude;//długość geograficzna

    //moja lokalizacja
    var div = document.getElementById("location");
    div.innerHTML = "Jesteś na szerokości " + latitude + " i długości " + longitude;

    //Dystans do HELIONU
    var km = computeDistance(position.coords, ourCoords);
    var distance = document.getElementById("distance");
    distance.innerHTML = "Jesteś " + km + " km od siedziby Helionu";
    
    showMap(position.coords);
    
}

 

 

Tak wygląda mój kod w HTML5 który startuje moją stronkę:


 

<!DOCTYPE html>
<html>
    <head>
        <title>Siedziba helion - lokalizacja</title>
        <script src="lokalizator.js"></script>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAcM8lRS03fxef7FnItePwFbeAZtmnSAyY"></script>
    </head>
    <body>
        <div id="location">
            <!--Tu znajudje się moja lokalizacja -->
        </div>
        <div id="distance">
            <!--Tu znajduje się odległość od siedziby Helionu-->
        </div>
        <div id="map">
            
            <!--Tutaj znajduje się mapa-->
        </div>
    </body>
</html>

 

komentarz 25 listopada 2016 przez MichuDev Pasjonat (20,300 p.)
Zamień id na class. HTML do bloku z kodem, nie pisz wszystkiego pogrubioną czcionką (nie wszystko jest bardzo ważne, i łamiesz regulamin punkt 2F).
komentarz 25 listopada 2016 przez Bartek Nowicjusz (230 p.)
Ok rozumiem, przepraszam za pogrubioną czcionkę.

Zmieniłem id na class ale to nie przyniosło rezultatu, no może poza takim że tym razem wyświetlił się błąd w konsoli:

Uncaught TypeError: js?key=AIzaSyAcM8lRS03fxef7FnItePwFbeAZtmnSAyY:85

Cannot read property 'firstChild' of null(…)
komentarz 26 listopada 2016 przez ShiroUmizake Nałogowiec (46,300 p.)
Czy napewno dobrze wskazujesz w DOM? sprawdż console.log (typeof zmienna) czy to jest DOM.
komentarz 26 listopada 2016 przez Bartek Nowicjusz (230 p.)
Po sprawdzeniu console.log(map); wnioskuje że dobrze wskazuje ale zastanawiam się czy kolejność wykonywania funkcji w JS może mieć z tym coś wspólnego. Tylko hmm... nie wiem jak to pozmieniać żeby zaczęło działać. Kilkukrotnie kopiowałem i wklejałem funkcje w inne miejsca ale nic to nie dawało ;/
komentarz 26 listopada 2016 przez ShiroUmizake Nałogowiec (46,300 p.)
Wrzucisz kod na live?
komentarz 26 listopada 2016 przez Bartek Nowicjusz (230 p.)
Przykro mi ale nie bardzo rozumiem jak mam tego dokonać ;/
Mój kod zarówno w JavaScript jak i w HTML masz wyżej.

Korzystam też z programu TeamViewer 11 i mogę wpuścić ewentualnie kogoś tak aby zobaczył sam o co chodzi.
komentarz 26 listopada 2016 przez ShiroUmizake Nałogowiec (46,300 p.)

Hmmm... Jednej rzeczy mi to brakuje, jeżeli chcesz skorzystać z googleAPI musisz posiadać unikatowy callkey. Wynika to z tego zdania:

All Google Maps JavaScript API applications require authentication.

Więcej na ten temat przeczytasz tutaj:

https://developers.google.com/maps/documentation/javascript/get-api-key

Z dużym prawdopodobieństwem to jest to gdyż błąd jaki otrzymujesz przypomina klucz autoryzacyjny.

komentarz 26 listopada 2016 przez Bartek Nowicjusz (230 p.)
Jeszcze nie wykupiłem żadnej domeny z uwagi na to że chciałbym najpierw poćwiczyć lokalnie choć może znajdę coś darmowego dla moich testów.
komentarz 26 listopada 2016 przez Bartek Nowicjusz (230 p.)
edycja 26 listopada 2016 przez Bartek
Czytałem ten artykuł i nawet korzystałem z niego i wygenerowałem tam ten klucz  i znajduje się w pliku HTML
wygląda on tak:
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAcM8lRS03fxef7FnItePwFbeAZtmnSAyY"></script>

 

W tej chwili stronkę wrzuciłem na darmowy hosting (nie wiem czemu ale na google chrome nie dziala ta stronka proszę próbować na innej przeglądarce bo inaczej wyskakuje komumnikat że dostęp zabroniony przez użytkownika) poniżej link:

http://bartekruszglowa.cba.pl/

2 odpowiedzi

0 głosów
odpowiedź 28 listopada 2016 przez Bartek Nowicjusz (230 p.)
wybrane 28 listopada 2016 przez Bartek
 
Najlepsza
Po dość długim czasie i namysłach problem rozwiązałem sam bez pomocy FORMU :)
Moja mapa nie wyświetlała się z uwagi na to iż po pobraniu google map mój div przyjmował postać:

<div id="map" style=" position: relative; overflow: hidden;>

Po ustawieniu moim wygląda to tak:

<div id="map" style="width: 750px; height: 600px">

Trochę dziwi mnie to że nikt z doświadczonych programistów nie odkrył mojego trywialnego problemu, a przecież wrzuciłem swoją stronę i udostępniłem pliki.
No cóż grunt że doszedłem do tego sam. Mimo wszystko dziękuje wszystkim za choćby próbę pomocy:)
komentarz 28 listopada 2016 przez ShiroUmizake Nałogowiec (46,300 p.)

style="width: 750px; height: 600px

Bo to panie kolego mój drogi, powinno być w klasie map a nie jako style.

komentarz 28 listopada 2016 przez Bartek Nowicjusz (230 p.)
Oczywiście zgadzam się z Tobą w tej chwili pewnie mógłbym zrobić tak jak radzisz ale zwróć uwagę, iż moja przygoda z geolokalizacją dopiero się zaczyna więc nie byłem pewien co jest nie tak, a odpowiedzi które otrzymałem nie mówiły tego co napisałeś w tej chwili, czyli dopiero po tym jak rozwiązałem swój problem.
Ale mimo wszystko Twoja odpowiedź jest dla mnie bardzo cenna, a więc dziękuje za włączenie się do dyskusji i pomoc.
0 głosów
odpowiedź 26 listopada 2016 przez Bartek Nowicjusz (230 p.)
Może to ułatwi ale gdy wchodzę w narzędzie dla programistów i rozwijam mój <div id="map"> to widać tutaj cały kod mapy, nie mniej jednak ona się nie wyświetla na stronie ;/

Podobne pytania

+1 głos
0 odpowiedzi 2,508 wizyt
pytanie zadane 1 sierpnia 2016 w JavaScript przez Loki Użytkownik (560 p.)
0 głosów
0 odpowiedzi 129 wizyt
pytanie zadane 5 listopada 2019 w JavaScript przez cyrus33 Użytkownik (680 p.)
0 głosów
1 odpowiedź 119 wizyt
pytanie zadane 8 sierpnia 2019 w PHP przez cyrus33 Użytkownik (680 p.)

92,624 zapytań

141,482 odpowiedzi

319,824 komentarzy

62,006 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...