C# net 4的位置选择器
我正在开发一个应用程序来控制现场项目。我需要让用户指定项目的位置,从国家到地址,以及纬度/经度坐标 问题是,不同国家的位置信息没有统一描述,即国家在其位置层次结构中有不同的名称。因此,如果一个项目位于美国,它将具有以下层次结构:C# net 4的位置选择器,c#,.net,sql-server-2008,.net-4.0,C#,.net,Sql Server 2008,.net 4.0,我正在开发一个应用程序来控制现场项目。我需要让用户指定项目的位置,从国家到地址,以及纬度/经度坐标 问题是,不同国家的位置信息没有统一描述,即国家在其位置层次结构中有不同的名称。因此,如果一个项目位于美国,它将具有以下层次结构: Country / State / City 另一方面,智利的等级制度是: Country / Region / County / City / district / neighborhood 我应该如何建模 是否有一个预制的.net模块可以让我的项目继续工作?我是
Country / State / City
另一方面,智利的等级制度是:
Country / Region / County / City / district / neighborhood
我应该如何建模
是否有一个预制的.net
模块可以让我的项目继续工作?我是否应该将层次结构简化为四个不同的层次,让用户处理不同国家不同层次结构的复杂性
对我来说,最好的解决方案是使用一个预制的程序集,我可以毫不费力地将其插入代码中,但我不怕自己编写实现
问题是,我尝试的每一个解决方案似乎都太复杂而不实用,因此任何建议都是非常受欢迎的。为什么不存储纬度/经度坐标,然后使用GMAP查找位置:
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; } }
}
这可能是可行的,问题是纬度和经度并不总是可用的,让用户手动获取这些值可能是不切实际的。也许反过来也存在?因此,如果用户有一个lat,他可以输入它们,如果没有,也许可以点击谷歌地图,让api返回所有相关信息?太好了!谢谢你,我一完成重构就会检查出来