2012-01-20 13 views
8

Korzystam z usługi sieciowej z geokodera, aby uzyskać długi i długi adres, miasto i stan. Kiedy używam poniższego przykładu, nie dostaję czasu i długości. Czy robię coś złego tutaj.Pobierz długość geograficzną z adresu C#

Zamówiony adres: 1125 E. 102-ty Street, Los Angeles, Kalifornia

Oto mój kod:

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); 
} 

LAT i długo wraca z 0. Próbowałem dodać kod pocztowy zbyt ale to nie zadziałało. Czy są jakieś lepsze serwisy internetowe, które dadzą mi aktualne wyniki.

Z góry dziękuję.

+0

[Mapy Google] (http://code.google.com/apis/maps/faq.html#geocoder_exists) robi to –

+1

To naprawdę nie jest pytanie C#. Jest to pytanie dotyczące usługi sieciowej. –

+0

Proszę przejrzeć swoje pytanie. Dotyczy konkretnej usługi WWW, a nie C#. – Strillo

Odpowiedz

4

Często używam Bing Maps Rest APIs. Można geo-kod za pomocą żądań tak:

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

można zobaczyć go w użyciu w codeproject article I wrote on reactive extensions.

Przykładowo, adres:

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

daje następującą odpowiedź:

{ 
    "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" 
} 

albo ... dla danych XML, dodać 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 

co daje:

<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> 

Więc lat/long za dany adres jest (33,9, -118,2)

1

Google Maps API ma serwis internetowy, który zwraca szer/długo i działa dobrze dla dużych krajów. Zobacz przykład http://maps.google.com/maps/geo?q=1%205th%20ave,new%20york,ny,us. Obsługiwane są różne formaty wyjściowe, w tym CSV, http://maps.google.com/maps/geo?q=1%205th%20ave,new%20york,ny,us&output=csv, JSON itp.

Nie znam geocoder.us, ale mapy Google z pewnością dobrze sprawdzają się w przypadku adresów w USA.

Edit 1: Zobacz http://code.google.com/apis/maps/faq.html#whatcountries na liście krajów obsługiwane

Edycja 2: Dla większego znaczenia, oto próbka Google Maps wywołanie API dla swojego adresu w pytaniu: http://maps.google.com/maps/geo?q=1125%20E.%20102nd%20Street,%20Los%20Angeles,%20CA

+1

jakie są główne kraje? – AnthonyBlake

+0

@AnthonyBlake Kraje o pewnym, arbitralnym rozmiarze lub poziomie rozwoju, jestem pewien, –

+0

Kraje dodane jako link w odpowiedzi –

0

użyłem Yahoo API w przeszłość z sukcesem. To link pokazuje, jak z niego korzystać z C#

Nadzieję, że pomaga.

Powiązane problemy