none
Usando o BingMaps RRS feed

  • Pergunta

  • Bom dia, estou  iniciando com o desenvolvimento para windows phone, e estudando um pouco o comportamento do Namespace System.Device.Location me deparei com uma duvida,posso utilizar a classe CivilAddressResolver para recuperar o CivilAddress de um local através de uma GeoCoordinate, mas como poderia fazer o contrario; recuperar as coordenadas de um local a partir de seu endereço?

    segunda-feira, 2 de janeiro de 2012 16:41

Respostas

  • Tinha percebido direito, mas indiquei um post que se referia ao inverso!!!

    Eu por acaso tenho algo implementado nesse sentido, mas usando o Google:

     

    using System;
    using System.Globalization;
    using System.Linq;
    using System.Net;
    using System.Xml.Linq;
    
    namespace PedroLamas.Helpers
    {
        public class GeocodeHelper
        {
            private const string GOOGLE_GEOCODE_SERVICE_URL = "http://maps.googleapis.com/maps/api/geocode/xml?address={0}&sensor=false";
    
            public void GeocodeLocation(string location, Action<GeocodeHelperResult> callback, object state)
            {
                string requestUrl = string.Format(GOOGLE_GEOCODE_SERVICE_URL,
                    location);
    
                var request = HttpWebRequest.Create(requestUrl);
    
                request.BeginGetResponse(ar =>
                {
                    try
                    {
                        var response = (HttpWebResponse)request.EndGetResponse(ar);
    
                        if (response.StatusCode == HttpStatusCode.OK)
                        {
                            var resultDocument = XDocument.Load(response.GetResponseStream());
                            var statusNode = resultDocument.Root
                                .Element("status");
    
                            if (statusNode.Value == "OK")
                            {
                                var resultNode = resultDocument.Root
                                    .Elements("result")
                                    .FirstOrDefault(x => x.Elements("type")
                                        .Any(y => y.Value == "country"));
    
                                if (resultNode == null)
                                {
                                    resultNode = resultDocument.Root
                                        .Element("result");
                                }
    
                                var countryNode = resultNode
                                    .Elements("address_component")
                                    .FirstOrDefault(x => x.Elements("type")
                                        .Any(y => y.Value == "country"));
    
                                var stateProvinceNode = resultNode
                                    .Elements("address_component")
                                    .FirstOrDefault(x => x.Elements("type")
                                        .Any(y => y.Value == "administrative_area_level_1"));
    
                                var cityNode = resultNode
                                    .Elements("address_component")
                                    .FirstOrDefault(x => x.Elements("type")
                                        .Any(y => y.Value == "locality"));
    
                                var locationNode = resultNode
                                    .Element("geometry")
                                    .Element("location");
    
                                callback(new GeocodeHelperResult(state,
                                    countryNode.Element("long_name").Value,
                                    countryNode.Element("short_name").Value,
                                    stateProvinceNode != null ? stateProvinceNode.Element("long_name").Value : string.Empty,
                                    cityNode != null ? cityNode.Element("long_name").Value : string.Empty,
                                    double.Parse(locationNode.Element("lat").Value, CultureInfo.InvariantCulture),
                                    double.Parse(locationNode.Element("lng").Value, CultureInfo.InvariantCulture)));
                            }
                            else
                                throw new Exception(statusNode.Value);
                        }
                        else
                        {
                            throw new Exception(string.Format("Http Error: ({0}) {1}",
                                response.StatusCode,
                                response.StatusDescription));
                        }
                    }
                    catch (Exception ex)
                    {
                        if (System.Diagnostics.Debugger.IsAttached)
                            System.Diagnostics.Debugger.Break();
    
                        callback(new GeocodeHelperResult(state, ex));
                    }
                }, null);
            }
    
            #region Auxiliary Classes
    
            public class GeocodeHelperResult
            {
                #region properties
    
                public string Country { get; private set; }
    
                public string CountryCode { get; private set; }
    
                public string StateProvince { get; private set; }
    
                public string City { get; private set; }
    
                public double Latitude { get; private set; }
    
                public double Longitude { get; private set; }
    
                public object State { get; private set; }
    
                public Exception Error { get; private set; }
    
                #endregion
    
                public GeocodeHelperResult(object state, string country, string countryCode, string stateProvince, string city, double latitude, double longitude)
                {
                    State = state;
                    Country = country;
                    CountryCode = countryCode;
                    StateProvince = stateProvince;
                    City = city;
                    Latitude = latitude;
                    Longitude = longitude;
                }
    
                public GeocodeHelperResult(object state, Exception error)
                {
                    State = state;
                    Error = error;
                }
            }
    
            #endregion
        }
    }
    

    Toma atenção que no meu caso eu precisava era de obter principalmente o País, mas no teu é as coordenadas; terás assim que alterar o "parse" do xml para obter esses dados! :)


    Pedro Lamas
    DevScope | Senior Solution Developer & WP7 Development Speaker
    www.pedrolamas.com | @pedrolamas
    • Sugerido como Resposta Pedro LamasMVP terça-feira, 3 de janeiro de 2012 17:44
    • Editado Pedro LamasMVP terça-feira, 3 de janeiro de 2012 17:46
    • Marcado como Resposta Fernando Figuera segunda-feira, 2 de abril de 2012 19:23
    terça-feira, 3 de janeiro de 2012 17:44

Todas as Respostas

  • Creio que este artigo é mesmo o que precisas:

    http://www.nickharris.net/2010/12/how-to-reverse-geocode-a-location-to-an-address-on-windows-phone-7/


    Pedro Lamas
    DevScope | Senior Solution Developer & WP7 Development Speaker
    www.pedrolamas.com | @pedrolamas
    • Sugerido como Resposta Pedro LamasMVP terça-feira, 3 de janeiro de 2012 11:03
    • Não Sugerido como Resposta Pedro LamasMVP terça-feira, 3 de janeiro de 2012 17:39
    terça-feira, 3 de janeiro de 2012 11:03
  • Pedro obrigado pela dica, mas o que estou procurando realmente é o inverso disso quero recuperar as coordenadas geograficas (latitude e logitude) a partir de um endereço,  conhece algo neste sentido?
    terça-feira, 3 de janeiro de 2012 17:34
  • Tinha percebido direito, mas indiquei um post que se referia ao inverso!!!

    Eu por acaso tenho algo implementado nesse sentido, mas usando o Google:

     

    using System;
    using System.Globalization;
    using System.Linq;
    using System.Net;
    using System.Xml.Linq;
    
    namespace PedroLamas.Helpers
    {
        public class GeocodeHelper
        {
            private const string GOOGLE_GEOCODE_SERVICE_URL = "http://maps.googleapis.com/maps/api/geocode/xml?address={0}&sensor=false";
    
            public void GeocodeLocation(string location, Action<GeocodeHelperResult> callback, object state)
            {
                string requestUrl = string.Format(GOOGLE_GEOCODE_SERVICE_URL,
                    location);
    
                var request = HttpWebRequest.Create(requestUrl);
    
                request.BeginGetResponse(ar =>
                {
                    try
                    {
                        var response = (HttpWebResponse)request.EndGetResponse(ar);
    
                        if (response.StatusCode == HttpStatusCode.OK)
                        {
                            var resultDocument = XDocument.Load(response.GetResponseStream());
                            var statusNode = resultDocument.Root
                                .Element("status");
    
                            if (statusNode.Value == "OK")
                            {
                                var resultNode = resultDocument.Root
                                    .Elements("result")
                                    .FirstOrDefault(x => x.Elements("type")
                                        .Any(y => y.Value == "country"));
    
                                if (resultNode == null)
                                {
                                    resultNode = resultDocument.Root
                                        .Element("result");
                                }
    
                                var countryNode = resultNode
                                    .Elements("address_component")
                                    .FirstOrDefault(x => x.Elements("type")
                                        .Any(y => y.Value == "country"));
    
                                var stateProvinceNode = resultNode
                                    .Elements("address_component")
                                    .FirstOrDefault(x => x.Elements("type")
                                        .Any(y => y.Value == "administrative_area_level_1"));
    
                                var cityNode = resultNode
                                    .Elements("address_component")
                                    .FirstOrDefault(x => x.Elements("type")
                                        .Any(y => y.Value == "locality"));
    
                                var locationNode = resultNode
                                    .Element("geometry")
                                    .Element("location");
    
                                callback(new GeocodeHelperResult(state,
                                    countryNode.Element("long_name").Value,
                                    countryNode.Element("short_name").Value,
                                    stateProvinceNode != null ? stateProvinceNode.Element("long_name").Value : string.Empty,
                                    cityNode != null ? cityNode.Element("long_name").Value : string.Empty,
                                    double.Parse(locationNode.Element("lat").Value, CultureInfo.InvariantCulture),
                                    double.Parse(locationNode.Element("lng").Value, CultureInfo.InvariantCulture)));
                            }
                            else
                                throw new Exception(statusNode.Value);
                        }
                        else
                        {
                            throw new Exception(string.Format("Http Error: ({0}) {1}",
                                response.StatusCode,
                                response.StatusDescription));
                        }
                    }
                    catch (Exception ex)
                    {
                        if (System.Diagnostics.Debugger.IsAttached)
                            System.Diagnostics.Debugger.Break();
    
                        callback(new GeocodeHelperResult(state, ex));
                    }
                }, null);
            }
    
            #region Auxiliary Classes
    
            public class GeocodeHelperResult
            {
                #region properties
    
                public string Country { get; private set; }
    
                public string CountryCode { get; private set; }
    
                public string StateProvince { get; private set; }
    
                public string City { get; private set; }
    
                public double Latitude { get; private set; }
    
                public double Longitude { get; private set; }
    
                public object State { get; private set; }
    
                public Exception Error { get; private set; }
    
                #endregion
    
                public GeocodeHelperResult(object state, string country, string countryCode, string stateProvince, string city, double latitude, double longitude)
                {
                    State = state;
                    Country = country;
                    CountryCode = countryCode;
                    StateProvince = stateProvince;
                    City = city;
                    Latitude = latitude;
                    Longitude = longitude;
                }
    
                public GeocodeHelperResult(object state, Exception error)
                {
                    State = state;
                    Error = error;
                }
            }
    
            #endregion
        }
    }
    

    Toma atenção que no meu caso eu precisava era de obter principalmente o País, mas no teu é as coordenadas; terás assim que alterar o "parse" do xml para obter esses dados! :)


    Pedro Lamas
    DevScope | Senior Solution Developer & WP7 Development Speaker
    www.pedrolamas.com | @pedrolamas
    • Sugerido como Resposta Pedro LamasMVP terça-feira, 3 de janeiro de 2012 17:44
    • Editado Pedro LamasMVP terça-feira, 3 de janeiro de 2012 17:46
    • Marcado como Resposta Fernando Figuera segunda-feira, 2 de abril de 2012 19:23
    terça-feira, 3 de janeiro de 2012 17:44
  • Li isto muito rapidamente, mas parece-me que é exactamente o que pretendes, desta vez via Bing! :)

    http://blog.ezidata.com.au/post/Using-the-Bing-Maps-API-in-your-WP7-App.aspx


    Pedro Lamas
    DevScope | Senior Solution Developer & WP7 Development Speaker
    www.pedrolamas.com | @pedrolamas
    quinta-feira, 5 de janeiro de 2012 13:09