2010-08-02 12 views
14

Sto lavorando a una bacheca di lavoro in Codeigniter PHP + jQuery dove i datori di lavoro inseriscono la loro posizione e usiamo Google Maps API per tracciarlo. Anche se questo ha avuto risultati incredibili sull'usabilità, il problema è quando cerchiamo di mostrare queste posizioni ai cercatori di lavoro che sono confusi e difficili da distinguere visivamente (leggono in questo modo: "02905, 2 miglia di distanza", "171 John St., 4 miglia di distanza "," Providence, RI, 10 miglia di distanza. "Conversione di latitudine/longitudine in nome città? (reverse geolocalizzando)

Desidero essere in grado di invertire il geolocalizzazione da una longitudine/latitudine a un livello impostato (idealmente, nome della città) in modo che nei risultati di ricerca possa avere le località sono elencate in questo modo: "Providence, RI, 10 miglia di distanza", "Providence, RI, 5 miglia di distanza", "Cranston, RI, 16 miglia di distanza."

C'è un modo per invertire il geocodificatore in città ? Vedo molti esempi di modi per invertire geocodifica nella posizione più vicina e indirizzabile, ma non c'è modo di controllare il livello.

Spero sia chiaro! Sentiti libero di commentare con qualsiasi domanda tu abbia bisogno di chiarimenti.

risposta

12

Google Geocoder, che supporta reverse geocoding restituisce address_components. Hai solo bisogno di estrarre il componente dell'indirizzo con tag locality e political se vuoi solo il nome della città. Se si desidera che gli stati e sono contrassegnati con administrative_area_level_1

+11

Prenditi cura dei Termini di servizio dell'API di Google Maps: http://code.google.com/apis/maps/documentation/geocoding/#Limits "Nota: il Le API di geocodifica possono essere utilizzate solo in combinazione con una mappa di Google, i risultati di geocodifica senza visualizzarli su una mappa sono vietati. Per i dettagli completi sull'utilizzo consentito, consulta i Termini e condizioni di servizio di Google Maps. – sabbour

+0

Ahhh grazie per quello! – Walker

2

Non puoi semplicemente fare l'indirizzo completo, quindi rilasciare la strada e il numero?

Direi che sarebbe più utile utilizzare l'indirizzo completo, in modo da ottenere una distanza più precisa (anche se si visualizza solo la città, lo stato).

MODIFICA: Se lo fai in questo modo, almeno dovrebbe essere restituito in un modulo standard, che puoi quindi facilmente regexare i dati che desideri.

+0

piacerebbe, ma nel nostro test di usabilità di un sacco di piccoli datori di lavoro sono a disagio distacco indirizzi specifici . – Walker

+0

Quindi i datori di lavoro inseriscono una stringa di localizzazione "Suburbs of Providence" piuttosto che una coppia lat/lon. – tpdi

+0

In realtà lo convertiamo in lat/long per memorizzarlo e tracciarlo su una mappa (per la pagina dei risultati/ricerca basata radiale). Il datore di lavoro inserisce una stringa a mano libera nella pagina di registrazione lavoro – Walker

38

fonti libere (ad esempio Creative Commons)

Geonames

Se siete alla ricerca di libero (come libertà) le fonti, è possibile usa l'API Geonames findNearbyPlaceName.

Per esempio, i seguenti rendimenti più vicine Placename:

http://api.geonames.org/findNearbyPlaceName?lat=47.3&lng=9&username=demo

Ulteriori informazioni sono disponibili qui

http://www.geonames.org/export/web-services.html#findNearbyPlaceName

Freebase

Invece di singolo punto ci vuole delimitata . esempio di chiamata:

http://api.freebase.com/api/service/geosearch?location=[30.2,50.4,30.6,50.8]&location_type=/location/citytown&inside=true&indent=1

Geocoder.ca

geocodifica inversa per gli indirizzi del Nord America.

Info: http://geocoder.ca/

chiamata Esempio: http://geocoder.ca/?latt=40.70771000786733&longt=-74.0109443664550&reverse=1&allna=1&geoit=xml&corner=1&jsonp=1&callback=test

Mappa Quest API

Utilizzando Open Street Map nominatim servizio:

http://open.mapquestapi.com/nominatim/v1/search?q=50.4,30.4&format=json

NON fonti prive

Yahoo PlaceFinder

Documentazione http://developer.yahoo.com/geo/placefinder/

chiamata Esempio:

http://where.yahooapis.com/geocode?q=38.898717,+-77.035974&gflags=R&appid=[yourappidhere]

API di Google Maps

documento zione:

http://code.google.com/apis/maps/documentation/geocoding/#ReverseGeocoding

+1

Grazie per le informazioni. Risposta molto informativa – ThinkingMonkey

0

servizi geocoding inverso (come Google, Yahoo, e GeoNames) funzionerà bene per questo scopo con alcune precisazioni:

  • Anche se non posso dire con certezza come i servizi commerciali funzionano, l'ultima volta che ho controllato GeoNames utilizza una strategia di punti di interesse più vicina per determinare la città. Questo può essere un problema se il tuo punto di interrogazione è in qualche modo vicino a un confine tra due città e la voce più vicina nel database GeoNames è sull'altro lato di quel confine. Questo in realtà accade un bel po 'nella mia esperienza, quindi questo non è solo un po' di tecnicità.
  • Inoltre, se si è preoccupati dell'esperienza utente, qualsiasi soluzione di API Web aggiunge latenza e riduce l'affidabilità.

Gestisco un sito Web che offre un numero di API Web geografiche commerciali e vende le librerie Java che abbiamo creato per supportare tali API. Uno di essi (che ha solo copertura negli Stati Uniti) utilizza una corretta mappa poligonale delle città e delle città negli Stati Uniti per restituire il risultato che contiene il punto di query. E 'preciso e veloce, quindi se questo è un componente mission critical nel vostro sistema, vi consiglio di dare un'occhiata al nostro sito web:

http://askgeo.com

La pagina che è specifico per la ricerca città dal lat/lon è:

http://askgeo.com/database/UsPlace2010

0

ero alla ricerca di un'API per convertire latitudine/longitudine in città. Sembra che questa fosse la domanda originale su questo thread.

Ho visto i dati "http://download.geonames.org/export/dump/" condivisi su un altro thread StackOverflow Given the lat/long coordinates, how can we find out the city/country? e ho implementato il mio servizio Web.

È possibile vederlo in esecuzione a http://scatter-otl.rhcloud.com/location?lat=36&long=-78.9 Basta modificare la latitudine e la longitudine per le posizioni.

Viene distribuito su OpenShift (piattaforma RedHat). La prima chiamata dopo un lungo periodo di inattività potrebbe richiedere del tempo, ma in genere le prestazioni sono soddisfacenti. Sentiti libero di usare questo servizio come preferisci ...

Inoltre, è possibile trovare la fonte del progetto allo https://github.com/turgos/Location.

0

La geolocalizzazione HTML5 richiede l'autorizzazione dell'utente. Se non si desidera questo comportamento, è possibile rivolgersi a un provider esterno come https://geoip-db.com. Offrono un servizio di geolocalizzazione gratuito basato su indirizzi IP.

Prova questo esempio:

<!DOCTYPE html> 
<html> 
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no"/> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
<title>Geo City Locator</title> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> 
</head> 
<body > 
    <div>Country: <span id="country"></span></div> 
    <div>State: <span id="state"></spa></div> 
    <div>City: <span id="city"></span></div> 
    <div>Latitude: <span id="latitude"></span></div> 
    <div>Longitude: <span id="longitude"></span></div> 
    <div>IP: <span id="ip"></span></div>  
    <script> 
     $.getJSON('https://geoip-db.com/json/geoip.php?jsonp=?') 
     .done (function(location) { 
      $('#country').html(location.country_name); 
      $('#state').html(location.state); 
      $('#city').html(location.city); 
      $('#latitude').html(location.latitude); 
      $('#longitude').html(location.longitude); 
      $('#ip').html(location.IPv4);    
     }); 
    </script> 
</body> 
</html>