0

我正在开发一个应用程序来控制现场项目。我需要让用户指定项目的位置,从国家到地址,以及纬度/经度坐标。

问题是,不同国家/地区的位置信息没有统一描述,即,国家/地区在其位置层次结构中具有不同的名称。因此,如果一个项目位于美国,它将具有以下层次结构:

Country / State / City

另一方面,智利的等级制度为:

Country / Region / County / City / district / neighborhood

我应该如何建模?

是否有一个预制.net模块可以粘贴到我的项目中?我是否应该将层次结构简化为四个不同的级别,并让用户处理各国不同层次结构的复杂性?

对我来说最好的解决方案是使用预制的程序集,我可以毫不费力地坚持到我的代码中,但我不害怕自己编写实现代码。

问题是我设法烹饪的每一个解决方案似乎都太复杂而无法实用,所以任何建议都非常受欢迎。

4

1 回答 1

0

为什么不只存储纬度/经度坐标,然后使用 GMaps 查找位置:

static string baseUri = 
  "http://maps.googleapis.com/maps/api/geocode/xml?latlng={0},{1}&sensor=false";
string location = string.Empty;

public static void RetrieveFormatedAddress(string lat, string lng)
{
    string requestUri = string.Format(baseUri, lat, lng);

    using (WebClient wc = new WebClient())
    {
        string result = wc.DownloadString(requestUri);
        var xmlElm = XElement.Parse(result);
        var status = (from elm in xmlElm.Descendants() where 
            elm.Name == "status" select elm).FirstOrDefault();
        if (status.Value.ToLower() == "ok")
        {
            var res = (from elm in xmlElm.Descendants() where 
                elm.Name == "formatted_address" select elm).FirstOrDefault();
            requestUri = res.Value;
        }
    }
}

编辑:

这是相反的简单版本:

public static Coordinate GetCoordinates(string region)
{
    using (var client = new WebClient())
    {

        string uri = "http://maps.google.com/maps/geo?q='" + region + 
          "'&output=csv&key=sadfwet56346tyeryhretu6434tertertreyeryeryE1";

        string[] geocodeInfo = client.DownloadString(uri).Split(',');

        return new Coordinate(Convert.ToDouble(geocodeInfo[2]), 
                   Convert.ToDouble(geocodeInfo[3]));
    }
}

public struct Coordinate
{
    private double lat;
    private double lng;

    public Coordinate(double latitude, double longitude)
    {
        lat = latitude;
        lng = longitude;

    }

    public double Latitude { get { return lat; } set { lat = value; } }
    public double Longitude { get { return lng; } set { lng = value; } }

}
于 2012-10-26T02:30:58.123 回答