How to store geocoded address information into the database

我与影子孤独终老i 提交于 2019-11-30 19:12:58

问题


I have a geocode request that loops through multiple addresses in my data base and returns latitude and longitude as well as other information.

foreach(var row in data){
        <script type="text/javascript" src="https://maps.googleapis.com/maps/api/geocode/json?address=@HttpUtility.UrlEncode(row.ADDRESS1)+@HttpUtility.UrlEncode(row.CITY)+@row.ST+CA&key=???apikey???"></script>
    }

Which turns into a few hundred requests and gives my latitudes and longitudes for each. I need to take the latitude and longitude and store it into the database.

I don't really care if it returns json, or xml.

I can't find a lot of information on how to do this, most of the information I find is questioning whether or not you actually are aloud to do it which I have already looked into. I'm new to programming in general and i'm as specially new to c# and working with goggles api's


回答1:


Im using this code in a delivery call center, maybe it can help you:

                foreach(var row in data)
                {

                    string strAddr = row.ADDRESS1 + "," + row.CITY; //here you've to write the exact address you want to geo

                    GoogleMapsDll.GeoResponse myCoordenadas = new GoogleMapsDll.GeoResponse();
                    myCoordenadas = GoogleMapsDll.GoogleMaps.GetGeoCodedResults(strAddr);

                    string strLat = myCoordenadas.Results[0].Geometry.Location.Lat.ToString();  
                    string strLong = myCoordenadas.Results[0].Geometry.Location.Lng.ToString();

                    System.Threading.Thread.Sleep(2000); //THIS IS AN API LIMITs

                    //this is just an example to update your sql rows, you can use the info where you need
                    using(SqlConnection myConnection = new SqlConnection(yourConnectionString))
                    {
                        myConnection.Open();
                        string strQueryUpdate = "UPDATE yourAddressTable SET lat = '" + strLat + "' , lon = '" + strLong + "' "
                            + "WHERE yourId = '" + row.YourId + "' ";

                        SqlCommand myCommandUpdate = new SqlCommand(strQueryUpdate, myConnectionUpdate);
                        myCommandUpdate.ExecuteNonQuery();

                    }

                 }

And the class to geo code your address (I took it from StackOverflow, but dont have the link)

using System.Net;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Web;

public class GoogleMapsDll
{
    public class GoogleMaps
    {
        /// <summary>
        ///
        /// </summary>
        /// <param name="address"></param>
        /// <returns></returns>
        public static GeoResponse GetGeoCodedResults(string address)
        {
            string url = string.Format(
                    "http://maps.google.com/maps/api/geocode/json?address={0}&region=dk&sensor=false",
                    HttpUtility.UrlEncode(address)
                    );
            var request = (HttpWebRequest)HttpWebRequest.Create(url);
            request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
            request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
            DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(GeoResponse));
            var res = (GeoResponse)serializer.ReadObject(request.GetResponse().GetResponseStream());
            return res;
        }
    }

    [DataContract]
    public class GeoResponse
    {
        [DataMember(Name = "status")]
        public string Status { get; set; }

        [DataMember(Name = "results")]
        public CResult[] Results { get; set; }

        [DataContract]
        public class CResult
        {
            [DataMember(Name = "geometry")]
            public CGeometry Geometry { get; set; }

            [DataContract]
            public class CGeometry
            {
                [DataMember(Name = "location")]
                public CLocation Location { get; set; }

                [DataContract]
                public class CLocation
                {
                    [DataMember(Name = "lat")]
                    public double Lat { get; set; }

                    [DataMember(Name = "lng")]
                    public double Lng { get; set; }
                }
            }
        }

        public GeoResponse()
        { }
    }
}


来源:https://stackoverflow.com/questions/26142739/how-to-store-geocoded-address-information-into-the-database

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!