2010-07-12 27 views
23

¿Alguien sabe de alguna API RESTful abierta a la que pueda llamar para geocodificar la dirección IP de un usuario a la latitud y longitud?Geocodificar una dirección IP?

Idealmente, sería algo así como: http://google.com/geocode_api/?IP=1.2.3.4 y devolvería la latitud y la longitud.

+0

posible duplicado de [Cómo determinar un código postal y ciudad desde una dirección IP?] (Http : //stackoverflow.com/questions/348614/how-to-determine-a-zip-code-and-city-from-an-ip-address) –

+1

@John Saunder, en realidad no me importa qué código postal o ciudad en la que se encuentra el usuario. Simplemente quiero saber su longitud y latitud para poder centrar mi mapa en la ubicación de su casa. – Tim

+0

¿Por qué crees que la respuesta es diferente? ¿Las API a las que se hace referencia no devuelven latitud y longitud? –

Respuesta

6

Se podría utilizar la API de Google: http://code.google.com/apis/ajax/documentation/#ClientLocation

Editar

Ejemplo:

<script type="text/javascript" 
    src="http://www.google.com/jsapi?key=ABCDEFG"></script> 
<script type="text/javascript"> 
google.load("maps", "2.x", {callback: initialize}); 

function initialize() { 
    if (google.loader.ClientLocation) { 
     var lat = google.loader.ClientLocation.latitude; 
     var long = google.loader.ClientLocation.longitude; 
     alert ("lat: " + lat + "\nlong: " + long); 
    } 
    else { alert ("not available"); } 
} 

+0

¿Puedo usar eso sin cargar todo el marco de Google Map? Al leer los documentos, no está claro qué módulo google.loader.ClientLocation existe dentro de – Tim

+0

. No existe dentro de ninguno de los módulos API, es parte del marco del cargador API. Es un comando hermano para google.load. – Josiah

+0

Entonces, ¿cómo puedo cargar JUST ClientLocation sin ningún otro módulo? – Tim

7

He aquí un par de llamadas simples ...

Ejemplo llama: -

Ejemplo de XML devuelto (ipinfodb): -

<Response> 
    <Ip>122.169.8.137</Ip> 
    <Status>OK</Status> 
    <CountryCode>IN</CountryCode> 
    <CountryName>India</CountryName> 
    <RegionCode>10</RegionCode> 
    <RegionName>Haryana</RegionName> 
    <City>Kaul</City> 
    <ZipPostalCode></ZipPostalCode> 
    <Latitude>29.85</Latitude> 
    <Longitude>76.6667</Longitude> 
    <Timezone>0</Timezone> 
    <Gmtoffset>0</Gmtoffset> 
    <Dstoffset>0</Dstoffset> 
</Response> 
+0

A partir del 30/12/2014 parece que el servicio de freegeoip.net ya no funciona. Sin embargo, el servicio de ipinfodb.com todavía está disponible, sin embargo, parece que han cambiado su URL de la aplicación. – hooknc

+0

Vínculos muertos ya no son válidos –

2

Usted puede encontrar una base de datos libre Geo siempre actualizada aquí http://www.maxmind.com/app/geolitecity

y se puede crear un nuevo servicio C# para usar esta Geo DB como http://www.maxmind.com/app/csharp

se puede probar en línea con más adelante link http://www.maxmind.com/app/lookup_city

+0

ninguno de estos devuelve la posición lat/long usando la dirección IP –

+0

@ geo171: Creo que necesitará uno de los siguientes sitios para obtener el lat/long Servicio: http: // api. hostip.info/get_html.php?ip=12.215.42.19&position=true Páginas: http://www.digitalpoint.com/tools/geovis... http://www.geobytes.com/IpLocator.htm http://www.melissadata.com/lookups/iploc... http://www.ip2location.com/free.asp http://www.hostip.info/ http://www.networldmap.com/ TryIt.htm http://www.private.org.il/IP2geo.html http://www.internetfrog.com/ http://webtools.live2support.com/misc_lo... http://www.seomoz.org/ip2loc/ip2loc.php http://www.webyield.net/domainquery.html –

19

Otro API de REST gratuito, con la información exacta de la ciudad, sería http://freegeoip.net Las solicitudes son bastante sencillas. Se podría utilizar algo como

http://freegeoip.net/{format}/{ip_or_hostname} 

de codificación geográfica de una dirección IP, en el formato puede ser csv, xml o json. Su sitio web tiene todos los detalles.

[ACTUALIZACIÓN:] FreeGeoIP.net no estaba continuamente disponible en el pasado como un servicio público. Sin embargo, el software siempre fue de código abierto y está disponible en Github. Es bastante fácil hacer funcionar su instalación local utilizando Docker, si necesita un servicio altamente confiable o su caso de uso excede la cuota actual de 15,000 solicitudes/hora.

+1

A partir del 12/30/2014 parece que el servicio de freegeoip.net ya no funciona. Sin embargo, el servicio de ipinfodb.com de la respuesta de Andy todavía está disponible. – hooknc

+1

A partir del 20/02/2016, el servicio de freegeoip.net parece estar funcionando bien. – cengel

+0

¿Cómo puedo enviar varias direcciones IP a este sitio web? –

5

En mi sitio utilizo http://ip-api.com/ para obtener la ubicación de la dirección IP. Tienen lindos límites (hasta 150 solicitudes por minuto). Ipinfo.io es gratis solo por menos de 1000 solicitudes por día.

Esto es resultado de ejemplo:

(
    [as] => AS8075 Microsoft Corporation 
    [city] => Redmond 
    [country] => United States 
    [countryCode] => US 
    [isp] => Microsoft bingbot 
    [lat] => 47.674 
    [lon] => -122.1215 
    [org] => Microsoft bingbot 
    [query] => 157.55.39.67 
    [region] => WA 
    [regionName] => Washington 
    [status] => success 
    [timezone] => America/Los_Angeles 
    [zip] => 98052 
) 

Este es el código PHP que puede utilizar:

$ip = $_SERVER['REMOTE_ADDR']; 
$result = json_decode(file_get_contents("http://ip-api.com/json/{$ip}")); 
//print_r ($result); 
echo "{$result->lat},{$result->lon}";//48.156,17.142 
+2

Ahora el límite es 150, y te prohíben si excedes los límites ([prueba] (http://ip-api.com/docs/)) 'Nuestro sistema automáticamente prohibirá cualquier IP direcciones que realizan más de 150 solicitudes por minuto. Para desbloquear su IP, haga clic aquí. –

+0

tnks @ValentineKonov, he actualizado la respuesta. –

+0

Solo para confirmar: al contrario que algunos de los enumerados anteriormente, este sigue funcionando. Proporciona alimentaciones bastante completas. –