2008-11-23 11 views
6

Mam problem z interfejsem API Map Google; Chcę określić LatLong dla określonego miejsca (na przykład z nazwy miasta), a następnie ustawić na nim moją mapę. Część LatLong działa, a więc wyśrodkowuje mapę w tym punkcie. Nie mogę jednak ustalić, jak określić dobry poziom powiększenia, gdy mam tylko ten pojedynczy punkt. Nie mogę po prostu przejść do standardowego poziomu powiększenia, który może wyglądać dobrze przez większość czasu, bo co dzieje się, gdy użytkownik wchodzi na przykład "Rosja" zamiast "Amsterdam"? Pewna pomoc byłaby doceniona :)Określanie poziomu powiększenia z pojedynczej funkcji LatLong w Google Maps API

Odpowiedz

1

Miałem to samo pytanie i odpowiedź Nicka Retallacka, co sprawdziło się u mnie. Aby podać więcej szczegółów, nazwa nieudokumentowanej właściwości to "ExtendedData", a wewnątrz znajduje się "LatLonBox", który zawiera północ, południe, wschód i zachód granic odpowiedniego poziomu powiększenia.

Na przykład, jeśli było zrobić wyszukiwania dla "90210", tu jest wyjście (które mam sformatowany dla czytelności):

{ 
    "id":"p1", 
    "address":"Beverly Hills, CA 90210, USA", 
    "AddressDetails":{ 
     "Accuracy":5, 
     "Country":{ 
      "AdministrativeArea":{ 
       "AdministrativeAreaName":"CA", 
       "SubAdministrativeArea":{ 
        "Locality":{ 
         "LocalityName":"Beverly Hills", 
         "PostalCode":{"PostalCodeNumber":"90210"} 
        }, 
        "SubAdministrativeAreaName":"Los Angeles" 
       } 
      }, 
      "CountryName":"USA", 
      "CountryNameCode":"US" 
     } 
    }, 
 // This is what you're looking for 
    "ExtendedData":{ 
     "LatLonBox":{ 
      "north":34.13919, 
      "south":34.067018, 
      "east":-118.38971, 
      "west":-118.442796 
     } 
    }, 
"Point":{ 
     "coordinates":[-118.4104684,34.1030032,0] 
    } 
} 

ten jest nieudokumentowane, więc nie jestem pewien, czy przetrwa zmiany interfejsu API. Najlepiej nie zakładaj, że zawsze tam będzie i określ jakąś rozsądną domyślną wartość powiększenia.

1

W pytaniu brakuje parametru wejściowego. Mówisz o punkcie LatLon, ale w rzeczywistości potrzebujesz LatLonBounds, aby skupić się na dostępnym rozmiarze okna mapy. Zakładam, że chcesz naśladować oficjalne zachowanie mapy Google. Oprócz geokodowania bazują na innych danych, do których Gmap API nie ma dostępu. Musisz więc zapewnić własne.

1

Poniższa rozmowa daje poziom powiększenia, czy można dostarczyć go z odpowiednim prostokątnym bounds obiektu:

GMap2.getBoundsZoomLevel(bounds) 

ale jak obliczyć granice?

Możesz ręcznie dodawać adnotacje do każdego rekordu źródłowego za pomocą prostokąta oznaczonego "za pomocą oka", używając mapy i wpisując wartości.

Idealnie chcesz danych, i na szczęście jest mnóstwo danych na DBPedia.

Moja geometria i algebra są trochę zardzewiałe, ale przy odrobinie obu tych elementów jestem pewien, że można obliczyć prostokąt, biorąc pod uwagę obszar, który chcesz zobaczyć. (Może zacząć od pierwiastka kwadratowego jeśli zakładając placu miasta lub zmienić πr jeśli zakładając kołową jeden)

Try out tego zapytania, aby wyodrębnić obszary regionów.

PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX dbpedia2: <http://dbpedia.org/property/> 
SELECT ?url, ?label, ?lat, ?long, ?area WHERE { 
    ?url geo:lat ?lat . 
    ?url geo:lat ?long . 
    ?url rdfs:label ?label . FILTER (lang(?label) = 'en') . 
    ?url dbpedia2:area ?area . FILTER (datatype(?area) = xsd:double) 
} LIMIT 10 

Musisz buforować wyniki lub załadować je do szybszego bardziej lokalne źródła danych jako dbpedia przeszukuje miliony trójek danych niestrukturalnych (no danych RDF). Możesz download the Titles, Infobox and coordinates data sets od DBPedia i załadować je do np. Jena. Pamiętaj, aby wyłączyć wszystkie opcje sprawdzania poprawności podczas ładowania :-)

Możesz również uzyskać dostęp do tych danych za pomocą RESTful API, który ma dość użyteczną formę internetową i można pobrać URL generowany za pomocą przycisku "Kopiuj link do pobrania" w okno pobierania firefox lub ustawienie formatu wyjściowego na HTML. Generuje również XML i JSON.

Nie zapomnij dodać margines chwiejne ukształtowanych miast ...

2

właśnie zadał to pytanie w Google IO. Ta funkcja istnieje, ale jest nieudokumentowana i nie ma jeszcze akcesorów. To, co chcesz zrobić, to uzyskać Structured Address. Sprawdź otrzymaną strukturę json i wyszukaj te nowe parametry. Będę zamieszczał więcej informacji, gdy będę miał szansę wypróbować tego.

0

Czy otrzymujesz punkty lokalizacji od Geocodera? Jeśli tak, możesz chwycić dokładność punktu i oprzeć na nim powiększenie (większa dokładność = większy zoom).

0

miałem ten sam problem here, ale z nowszej wersji API. Nowe rozwiązanie to map.fitBounds(autocomplete.getPlace().geometry.viewport);.

Powiązane problemy