Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Google API + pobieranie współrzędnych
Forum PHP.pl > Forum > XML, AJAX
Czadus
Witam.

Mam taki problem. Potrzebuję automatycznie pobrać współrzędne wielu miast dzięki usłudze Google Maps. Moje pytanie brzmi, jak to zrobić, w jaki sposób tak zautomatyzować mój projekt strony, aby pobrał wszystkie dane i zapisał je do mojej bazy. Cały sęk w tym, że potrzebuję te dane, a miejscowości w Polsce jest około 226tys, więc ręcznie jest to nierealne. Szukam zatem innego rozwiązania. Ma ktoś może jakieś pomysły?? Może Google API udostępnia takie możliwości, przy czym póki co, nic takiego nie znalazłem.
nospor
no ale spis miast masz? Bo jak tak, to zapodajesz do google api miasto i on ci zwraca jego wspolrzedne
Czadus
No to tak, wiem, że on je zwraca, tylko co, gdy potrzebujesz mieć współrzędne wszystkich miejscowości w Polsce?? A jest och ponad 200 tysięcy?? Więc potrzebuję mieć do tego automat, skrypt, który sam mi to wykona i zapisze do jakiejś bazy.

Udało mi się stworzyć coś takiego. Podaję miejscowość, ewentualnie kod pocztowy itp. a dostaję w odpowiedzi współrzędne. Kod wygląda następująco:

Kod
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'  
    'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>  
<html xmlns='http://www.w3.org/1999/xhtml'>  
<head>  
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
    <title>Przykład</title>  
    <script type="text/javascript" src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=KLUCZAPI"></script>
    <script type="text/javascript">
    <!-- <![CDATA[
    var map;
    var marker;
    var j=0;
    function pokaz(lat, lng, element) {
      marker = new GMarker(new GLatLng(lat, lng), {draggable: true});
      map.addOverlay(marker);
      GEvent.addListener(marker, "dragend", function() {
        document.getElementById(element).innerHTML = "("+marker.getLatLng().lat().toFixed(4)+","+marker.getLatLng().lng().toFixed(4)+")";
      });
    }
    
    function load() {
    
      if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"));
        map.setCenter(new GLatLng(51.629805, 19.237883), 6);
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
    
        function punkt(adres, info) {
          return new GClientGeocoder().getLatLng(adres, function(gps) {
            var lat = gps.lat().toFixed(4);
            var lng = gps.lng().toFixed(4);
            j++;
            pokaz(lat, lng, j);
            document.getElementById("dane").innerHTML += "<br /><a id='a"+j+"' href='javascript:pokaz("+lat+","+lng+", \"a"+j+"\")'>("+lat+","+lng+")</a> - "+info+" - "+adres;
          });
        }
    
        var dane = new Array(
        new Array("Częstochowa", "Częstochowa"),
        new Array("Sanok", "Sanok"),
        new Array("Warszawa", "Warszawa"),
        new Array("84-140, jastarnia", "Jastarnia"),
        new Array("szczecin", "Szczecin"),
        new Array("Osinów Dolny", "Osinów Dolny"))
        
        for(var i=0; i<dane.length; i++) { punkt(dane[i][0], dane[i][1]); }
      }
    }
    // ]]> -->
    </script>
</head>  
<body onload="load()" onunload="GUnload()">
    <div id="map" style="width: 550px; height: 500px"></div>
    <div id="dane"></div>
</body>
</html>


Pozostaje jeszcze kwestia, aby te dane zapisać do jakiejś bazy, lub pliku, prosto ze skryptu JavaScript
nospor
ale ty masz skorzystac api google z poziomu php a nie z poziomu js smile.gif

  1. <?php
  2. $addressG = 'http://maps.google.com/maps/geo?output=json&oe=utf-8&key=TWOJKLUCZ';
  3.        $addressG.='&q='.urlencode('Warszawa,Poland');
  4.        $page = file_get_contents($addressG);
  5.        $ar = json_decode($page,true);
  6.        print_r($ar);
  7. ?>

smile.gif

A w php do bazy juz chyba zapiszesz winksmiley.jpg
Czadus
Dzięki, w sumie łatwiejszy sposób. Niestety pozostaje jeszcze problem z poprawnym nakładaniem tych punktów na mapę, jedne są dobrze, to drugie jakoś tak przesunięte....
nospor
ja tam nie mialem zadnych problemow.

moze źle nakladasz, bo wspolrzedne mi google dobrze zwracalo
Czadus
No właśnie jest tak, że współrzędne pewnie są dobre, ale nie wiem jak mapkę dobrać, bo sek w tym, że mapką będzie zwykły JPG, a z google ja tylko chce pobrać współrzędne.
Maxiu
Cytat(Czadus @ 6.02.2009, 12:34:56 ) *
....miejscowości w Polsce jest około 226tys, więc ręcznie jest to nierealne....

Jak najbardziej realne smile.gif Polecam ten link: lista miast by GUS. Możesz wyeksportować smile.gif do excela, a potem na cvs, a wtedy import chociażby przez phpmyadmin to już prosta sprawa smile.gifsmile.gif
nexis
Ja korzystam z listy udostępnionej w Wikiźródłach. Wystarczy do tego napisać prosty parser i zrobić z danymi co tylko zechcesz.

U mnie struktura w formie drzewa (województwo -> powiat -> miejscowość) posiada obecnie 3 770 rekordów, a lista kodów pocztowych przypisanych do poszczególnych miejscowości 22 089. W bazie MySQL (MyISAM) waży to niecałe 750 kB.
Czadus
A czy jest możliwość, byś mi udostępnił taką bazę?? Zaoszczędziłoby mi to trochę pracy??
MMX3
no to jest 30 minut roboty stary my tu jesteśmy żeby cie nakierować na rozwiązanie a nie odwalić za ciebie brudną robotę.
ayeo
Wszystkich miejscowości w Polsce jest około (niecałe) 53k. Nie wiem skąd masz dane o ponad 200. Jednak większości nie znajdziesz na Google Maps bo są za małe.

Pozdrawiam!
graft
a czy jest możliwość pobrania współrzędnych w czasie rzeczywistym? SOrry jeśli pytanie wydaje się głupie, ale dopiero co ruszyłem z tematem GMaps.

Mam w bazie miasto+ulica+nr lokalu i chciałbym generować mapki automatycznie....
ayeo
Witam!

Możesz pobierać w czasie rzeczywistym. Jedyne ograniczenie to 15k wywołań dziennie. Jak chcesz więcej to musisz gadać z Google. I jeszcze musisz raczej mieć powiat i województow bo niektóre nazwy miast nie są jednoznaczne.

Pozdrawiam!
Czadus
No i robię to wszystko na pętli, z pomocą php, współrzędne otrzymane zapisuję do bazy. Niestety pewnym czasie przestałem otrzymywać z google współrzędne miejsc. Dlaczego?? Może to być związane z kluczem google?? A może inna jest przyczyna?? Może jest jakieś dzienne ograniczenie pobranych danych od nich??
nexis
Odpowiedź masz post wyżej:
Cytat(ayeo @ 24.02.2009, 06:26:23 ) *
Jedyne ograniczenie to 15k wywołań dziennie. Jak chcesz więcej to musisz gadać z Google.

i w oficjalnym Google Maps FAQ!
grzegorz_g
mam pytanie trochę w tym temacie:

czy robił ktoś (czy wogóle jest to do zrobienia) coś na wzór GOOGLE ANALYTICS - nakładka na mapę. Gdzie poprzez jaskrawość kolorów pokazuje się na mapie częstotliwość występowania określonych danych np. ilośc userów z danego miasta.

jak na poniższym zdjęciu


pozdrawiam i czekam na jakieś pomysły smile.gif
thek
Kurde... 3 wyrazy napisałem w google i od razu mi wypluło na pierwszym miejscu wynik tego co szukasz :/
Wyniki szukania w google dla frazy "google maps circle" dają jako pierwszy ten wynik -> http://dawsdesign.com/drupal/google_maps_circle_overlay
Czy to naprawdę takie trudne używać google?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.