Thursday, December 1, 2011

How to get lat long of address


This is google api which is used to get lat long of address directly. it return XML data .

http://maps.googleapis.com/maps/api/geocode/xml?sensor=false&address=%22%20+%20HttpContext.Current.Server.UrlEncode(2000,Town%20Center%20,48075,Southfield,MI,USA);


CS code

   LatLng latLong = GoogleMaps.GetLatLong(address.ToString().TrimEnd(','));
        if (latLong.Latitude != 0 && latLong.Longitude != 0)
        {

            txtLatitude.Text = latLong.Latitude.ToString();
            txtLongitude.Text = latLong.Longitude.ToString();
        }


create a class and past this code


 /// <summary>
        /// Perform a geocode lookup of an address
        /// </summary>
        /// <param name="addr">The address in CSV form line1, line2, postcode</param>
        /// <param name="output">CSV or XML</param>
        /// <returns>LatLng object</returns>
        public static LatLng GetLatLong(string addr)
        {
            //var url = "http://maps.google.co.uk/maps/geo?output=csv&key=" +
            //var url = "http://maps.google.com/maps/geo?output=csv&key=" +
            // It can return xml with json if required.
            var url = "http://maps.googleapis.com/maps/api/geocode/xml?sensor=false&address=" + HttpContext.Current.Server.UrlEncode(addr);//=1600+Amphitheatre+Parkway,+Mountain+View,+CA
                       //this.API_KEY + "&q=" + HttpContext.Current.Server.UrlEncode(addr);

            var request = WebRequest.Create(url);
            var response = (HttpWebResponse)request.GetResponse();

            if (response.StatusCode == HttpStatusCode.OK)
            {

                var ms = new MemoryStream();
                var responseStream = response.GetResponseStream();

                var buffer = new Byte[2048];
                int count = responseStream.Read(buffer, 0, buffer.Length);

                while (count > 0)
                {
                    ms.Write(buffer, 0, count);
                    count = responseStream.Read(buffer, 0, buffer.Length);
                }

                responseStream.Close();
                ms.Close();

                var responseBytes = ms.ToArray();
                var encoding = new System.Text.ASCIIEncoding();

                string coords = encoding.GetString(responseBytes);
                //string[] parts = coords.Split(',');

                //return new LatLng(
                //              Convert.ToDouble(parts[2]),
                //              Convert.ToDouble(parts[3]));
                return GetLatLongFromXML(coords);
            }

            return null;
        }
        private static LatLng GetLatLongFromXML(string xmlInput)
        {
            //string latLong = string.Empty;
            XPathNavigator nav;
            XPathDocument docNav;
            XPathNodeIterator NodeIter;
            String strExpressionLat;
            String strExpressionLng;
            StringReader reader = new StringReader(xmlInput);

            docNav = new XPathDocument(reader);
            nav = docNav.CreateNavigator();

            // This expression uses standard XPath syntax.
            strExpressionLat = "/GeocodeResponse//location/lat/text()";
            strExpressionLng = "/GeocodeResponse//location/lng/text()";
            //string latitude = nav.Evaluate(strExpressionLat).ToString();
            //string longitude = nav.Evaluate(strExpressionLng).ToString();
            double lat = 0.0;
            double lng = 0.0;
            NodeIter = (XPathNodeIterator)nav.Evaluate(strExpressionLat);
            if (NodeIter.MoveNext())
            {
                double.TryParse(NodeIter.Current.Value, out lat);
            }
           
            NodeIter = (XPathNodeIterator)nav.Evaluate(strExpressionLng);

            if (NodeIter.MoveNext())
            {
                double.TryParse(NodeIter.Current.Value, out lng);
            }

            //double.TryParse(oString(), out lat);
            //double.TryParse(nav.Evaluate(strExpressionLng).ToString(), out lng);
           
            //string str=string.Empty;
            //while (NodeIter.MoveNext())
            //{
            //    str += "," + NodeIter.Current.Value;
            //};

            //return latitude + "," + longitude;
            return new LatLng(lat, lng);
        }


No comments:

Post a Comment