2012-01-20 127 views
8

Estoy usando un servicio web desde el geocodificador para obtener la latitud y longitud de la dirección, la ciudad y el estado. Cuando uso el ejemplo a continuación, no obtengo el lat y long. Estoy haciendo algo mal aquí.Obtener Latitud Longitud desde una dirección C#

dirección solicitada: 1125 E. calle 102, Los Angeles, CA

Aquí está mi código:

private void GetLatLongFromAddress(string street, string city, string state) 
{ 
    string geocoderUri = string.Format(@"http://rpc.geocoder.us/service/rest?address={0},{1},{2}", street, city, state); 
    XmlDocument geocoderXmlDoc = new XmlDocument(); 
    geocoderXmlDoc.Load(geocoderUri); 
    XmlNamespaceManager nsMgr = new XmlNamespaceManager(geocoderXmlDoc.NameTable); 
    nsMgr.AddNamespace("geo", @"http://www.w3.org/2003/01/geo/wgs84_pos#"); 
    string sLong = geocoderXmlDoc.DocumentElement.SelectSingleNode(@"//geo:long", nsMgr).InnerText; 
    string sLat = geocoderXmlDoc.DocumentElement.SelectSingleNode(@"//geo:lat", nsMgr).InnerText; 

    Latitude = Double.Parse(sLat); 
    Longitude = Double.Parse(sLong); 
} 

El lat y largo se vuelva con 0. He intentado añadir código postal también, pero eso no funcionó ¿Hay algún servicio web mejor que me brinde los resultados actualizados?

Gracias de antemano.

+0

[Google maps] (http://code.google.com/apis/maps/faq.html#geocoder_exists) hace esto –

+1

Esto no es realmente una pregunta de C#. Es una pregunta sobre un servicio web. –

+0

Por favor, revise su pregunta. Se trata de un servicio web específico, no C#. – Strillo

Respuesta

4

A menudo utilizo el Bing Maps Rest APIs. Puede geo-código con las solicitudes como las siguientes:

http://dev.virtualearth.net/REST/v1/Locations/CA/adminDistrict/postalCode/locality/addressLine?includeNeighborhood=includeNeighborhood&key=BingMapsKey 

se puede ver que en uso en un codeproject article I wrote on reactive extensions.

Por ejemplo, su dirección:

http://dev.virtualearth.net/REST/v1/Locations/US/1125%20E.%20102nd%20Street,%20Los%20Angeles,%20CA?key=Ai9-KNy6Al-r_ueyLuLXFYB_GlPl-c-_iYtu16byW86qBx9uGbsdJpwvrP4ZUdgD 

da la siguiente respuesta:

{ 
    "authenticationResultCode":"ValidCredentials", 
    "brandLogoUri":"http:\/\/dev.virtualearth.net\/Branding\/logo_powered_by.png", 
    "copyright":"Copyright © 2012 Microsoft and its suppliers. All rights reserved. This API cannot be accessed and the content and any results may not be used, reproduced or transmitted in any manner without express written permission from Microsoft Corporation.", 
    "resourceSets":[ 
     { 
     "estimatedTotal":1, 
     "resources":[ 
      { 
       "__type":"Location:http:\/\/schemas.microsoft.com\/search\/local\/ws\/rest\/v1", 
       "bbox":[ 
        33.940492293415652, 
        -118.26180800227225, 
        33.948217728557005, 
        -118.24939194889963 
       ], 
       "name":"1125 E 102ND St, Los Angeles, CA 90002", 
       "point":{ 
        "type":"Point", 
        "coordinates":[ 
        33.944355010986328, 
        -118.25559997558594 
        ] 
       }, 
       "address":{ 
        "addressLine":"1125 E 102ND St", 
        "adminDistrict":"CA", 
        "adminDistrict2":"Los Angeles Co.", 
        "countryRegion":"United States", 
        "formattedAddress":"1125 E 102ND St, Los Angeles, CA 90002", 
        "locality":"Los Angeles", 
        "postalCode":"90002" 
       }, 
       "confidence":"High", 
       "entityType":"Address", 
       "geocodePoints":[ 
        { 
        "type":"Point", 
        "coordinates":[ 
         33.944355010986328, 
         -118.25559997558594 
        ], 
        "calculationMethod":"Parcel", 
        "usageTypes":[ 
         "Display" 
        ] 
        }, 
        { 
        "type":"Point", 
        "coordinates":[ 
         33.944118499755859, 
         -118.25559997558594 
        ], 
        "calculationMethod":"Interpolation", 
        "usageTypes":[ 
         "Route" 
        ] 
        } 
       ], 
       "matchCodes":[ 
        "Good" 
       ] 
      } 
     ] 
     } 
    ], 
    "statusCode":200, 
    "statusDescription":"OK", 
    "traceId":"81518ba504a3494bb0b62bdb6aa4b291|LTSM002104|02.00.83.500|LTSMSNVM001473, LTSMSNVM001463, LTSMSNVM001452, LTSMSNVM001851, LTSMSNVM001458, LTSMSNVM001462" 
} 

O ... para los datos XML, añadir o=xml:

http://dev.virtualearth.net/REST/v1/Locations/US/1125%20E.%20102nd%20Street,%20Los%20Angeles,%20CA?o=xml&key=Ai9-KNy6Al-r_ueyLuLXFYB_GlPl-c-_iYtu16byW86qBx9uGbsdJpwvrP4ZUdgD 

cual da:

<Response> 
    <Copyright>Copyright ? 2012 Microsoft and its suppliers. All rights reserved. This API cannot be accessed and the content and any results may not be used, reproduced or transmitted in any manner without express written permission from Microsoft Corporation.</Copyright> 
    <BrandLogoUri>http://dev.virtualearth.net/Branding/logo_powered_by.png</BrandLogoUri> 
    <StatusCode>200</StatusCode> 
    <StatusDescription>OK</StatusDescription> 
    <AuthenticationResultCode>ValidCredentials</AuthenticationResultCode> 
    <TraceId>b9af8a6b058b455ca9c368b9e32142fe|LTSM002102|02.00.83.500|LTSMSNVM002001, LTSMSNVM001464, LTSMSNVM001451, LTSMSNVM001452, LTSMSNVM001457, LTSMSNVM002052, LTSMSNVM001461</TraceId> 
    <ResourceSets> 
    <ResourceSet> 
     <EstimatedTotal>1</EstimatedTotal> 
     <Resources> 
     <Location> 
      <Name>1125 E 102ND St, Los Angeles, CA 90002</Name> 
      <Point> 
      <Latitude>33.944355010986328</Latitude> 
      <Longitude>-118.25559997558594</Longitude> 
      </Point> 
      <BoundingBox> 
      <SouthLatitude>33.940492293415652</SouthLatitude> 
      <WestLongitude>-118.26180800227225</WestLongitude> 
      <NorthLatitude>33.948217728557005</NorthLatitude> 
      <EastLongitude>-118.24939194889963</EastLongitude> 
      </BoundingBox> 
      <EntityType>Address</EntityType> 
      <Address> 
      <AddressLine>1125 E 102ND St</AddressLine> 
      <AdminDistrict>CA</AdminDistrict> 
      <AdminDistrict2>Los Angeles Co.</AdminDistrict2> 
      <CountryRegion>United States</CountryRegion> 
      <FormattedAddress>1125 E 102ND St, Los Angeles, CA 90002</FormattedAddress> 
      <Locality>Los Angeles</Locality> 
      <PostalCode>90002</PostalCode> 
      </Address> 
      <Confidence>High</Confidence> 
      <MatchCode>Good</MatchCode> 
      <GeocodePoint> 
      <Latitude>33.944355010986328</Latitude> 
      <Longitude>-118.25559997558594</Longitude> 
      <CalculationMethod>Parcel</CalculationMethod> 
      <UsageType>Display</UsageType> 
      </GeocodePoint> 
      <GeocodePoint> 
      <Latitude>33.944118499755859</Latitude> 
      <Longitude>-118.25559997558594</Longitude> 
      <CalculationMethod>Interpolation</CalculationMethod> 
      <UsageType>Route</UsageType> 
      </GeocodePoint> 
     </Location> 
     </Resources> 
    </ResourceSet> 
    </ResourceSets> 
</Response> 

Así que la latitud/longitud de su dirección dada es (33.9, -118.2)

1

Google Maps tiene una API de servicio web que devuelve latitud/longitud, y funciona bien para los principales países. Ver http://maps.google.com/maps/geo?q=1%205th%20ave,new%20york,ny,us para un ejemplo. Se admiten diferentes formatos de salida incluyendo CSV, http://maps.google.com/maps/geo?q=1%205th%20ave,new%20york,ny,us&output=csv, JSON, etc.

No estoy familiarizado con geocoder.us, pero Google Maps definitivamente funciona bien para direcciones de EE. UU.

Edición 1: Ver http://code.google.com/apis/maps/faq.html#whatcountries para una lista de países apoyó

Edición 2: Para mayor relevancia, he aquí una muestra de Google Maps llamada a la API para su dirección en cuestión: http://maps.google.com/maps/geo?q=1125%20E.%20102nd%20Street,%20Los%20Angeles,%20CA

+1

¿Cuáles son los principales países? – AnthonyBlake

+0

@AnthonyBlake Países de cierto tamaño arbitrario o nivel de desarrollo, estoy seguro. –

+0

Países añadidos como enlace en la respuesta –

0

Solía ​​Yahoo API en el pasado con éxito Este link le muestra cómo usarlo con C#

Espero que ayude.

Cuestiones relacionadas