public static M经纬度 地址编码(string __位置, string __城市 = null) { string __url = ""; string __返回值 = ""; if (string.IsNullOrEmpty(__城市)) { __url = "http://api.map.baidu.com/geocoder/v2/?ak={0}&output=json&address={1}"; __返回值 = Web服务请求(string.Format(__url, _ak, HttpUtility.UrlEncode(__位置))); } else { __url = "http://api.map.baidu.com/geocoder/v2/?ak={0}&output=json&address={1}&city={2}"; __返回值 = Web服务请求(string.Format(__url, _ak, HttpUtility.UrlEncode(__位置), __城市)); } var __JS序列化器 = new JavaScriptSerializer(); var __结果 = __JS序列化器.Deserialize <M地址编码结果>(__返回值); if (__结果.status != 0) { return(null); } var __百度坐标 = new M经纬度(__结果.result.location.lng, __结果.result.location.lat) { 类型 = E坐标类型.百度 }; return(HGPS坐标转换.百度坐标转谷歌坐标(__百度坐标)); }
private static M经纬度 转换成谷歌坐标(M经纬度 __原经纬度) { M经纬度 __结果 = __原经纬度; if (__原经纬度.类型 == E坐标类型.百度) { __结果 = HGPS坐标转换.百度坐标转谷歌坐标(__原经纬度); } else if (__原经纬度.类型 == E坐标类型.设备) { __结果 = HGPS坐标转换.原始坐标转谷歌坐标(__原经纬度); } return(__结果); }
static void 读取数据() { var _程序目录 = Path.GetDirectoryName(Assembly.GetCallingAssembly().Location); var __压缩文件路径 = Path.Combine(_程序目录, "行政区.gz"); var __字节流 = 解压(__压缩文件路径); int _起始位置 = 0; //检测文件是否有bom头 if (__字节流[0] == 0xef && __字节流[1] == 0xbb && __字节流[2] == 0xbf) { _起始位置 = 3; } var __所有行 = Encoding.UTF8.GetString(__字节流, _起始位置, __字节流.Length - _起始位置).Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < __所有行.Length; i++) { var __属性 = __所有行[i].Split(new char[] { ',' }, 6); if (__属性.Length < 5) { continue; } var __行政区 = new M行政区位置 { 省 = __属性[0], 市 = __属性[1], 区 = __属性[2], 经度 = double.Parse(__属性[3]), 纬度 = double.Parse(__属性[4]) }; _缓存.Add(__行政区); if (__属性.Length == 6) { var __边界坐标描述 = __属性[5]; __边界坐标描述.Split(new string[] { "||" }, StringSplitOptions.RemoveEmptyEntries) .ToList() .ForEach(q => __行政区.边界坐标.Add(q.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries) .Select( k => HGPS坐标转换.百度坐标转谷歌坐标(new M经纬度(double.Parse(k.Split(',')[0]), double.Parse(k.Split(',')[1])) { 类型 = E坐标类型.百度 })) .ToList())); } } }