2012-01-20 25 views
8

Adres, şehir ve eyalet arasındaki en uzun ve en uzun adresi almak için coğrafi kodlayıcıdan web hizmeti kullanıyorum. Aşağıdaki örneği kullandığımda, lat ve uzun süreyi alamıyorum. Burada yanlış bir şey yapıyorum.Enlem Boylamı bir adresten alın C#

Talep edilen adres:

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 ve uzun geri 0. ile gelir ben posta kodu çok ama eklemeye çalıştı: 1125 E. 102 Sokak, Los Angeles, CA İşte

benim kodudur Bu işe yaramadı. Bana güncel sonuçları verecek daha iyi web servisleri var mı?

Şimdiden teşekkürler.

+0

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

+1

Bu gerçekten C# sorusu değil. Bir web servisiyle ilgili bir soru. –

+0

Lütfen sorunuzu gözden geçirin. Bu belirli bir web servisiyle ilgili değil, C#. – Strillo

cevap

4

Sık sık Bing Maps Rest APIs'u kullanırım. Sen coğrafi kod aşağıdaki gibi istekleri kullanarak:

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

Bir codeproject article I wrote on reactive extensions kullanımda görebilirsiniz. Örneğin

, adres: XML veri için

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

Ya da ... eklemek o=xml: vermektedir

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 

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

şu yanıtı verir:

<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> 
sürece verilen adrese için/

Yani lat (33,9, -118,2)

1

Google Maps enlem/boylam verir ve büyük ülkeler için iyi çalışan bir web hizmeti API vardır. Örnek için bkz http://maps.google.com/maps/geo?q=1%205th%20ave,new%20york,ny,us. CSV, http://maps.google.com/maps/geo?q=1%205th%20ave,new%20york,ny,us&output=csv, JSON vb. Gibi farklı çıktı biçimleri desteklenmektedir.

geocoder.us'a aşina değilim, ancak Google haritaları ABD adresleri için kesinlikle iyi çalışıyor.

Düzenleme 1: ülkelerin listesi için http://code.google.com/apis/maps/faq.html#whatcountries bakın

Edit 2 desteklenen: http://maps.google.com/maps/geo?q=1125%20E.%20102nd%20Street,%20Los%20Angeles,%20CA

+1

büyük ülkeler hangileridir? – AnthonyBlake

+0

@AnthonyBlake Belli bir keyfi rasgele boyutta ya da seviyesinde olan ülkeler, eminim. –

+0

Ülkeler cevap olarak bağlantı olarak eklendi –

0

I Yahoo API kullandı: büyük alaka için , burada söz konusu Adresiniz için örnek bir Google Maps API çağrısı başarı ile geçmiş. Bu link, C#

ile nasıl kullanılacağını gösterir.

İlgili konular