Showing posts with label lat and long. Show all posts
Showing posts with label lat and long. Show all posts

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