예제 #1
0
        private void 显示行政区(M行政区位置 __行政区)
        {
            this.out地图.Position = new PointLatLng(__行政区.纬度, __行政区.经度);
            //绘制边界
            _边界图层.Routes.Clear();
            var __位置列表 = new List <PointLatLng>();

            __行政区.边界坐标.ForEach(__点列表 =>
            {
                var __GPS = new List <PointLatLng>();
                __点列表.ForEach(q =>
                {
                    //double __谷歌经度 = q.Lng;
                    //double __谷歌纬度 = q.Lat;
                    //HGPS坐标转换.百度坐标转谷歌坐标(q.Lat, q.Lng, out __谷歌纬度, out __谷歌经度);
                    //__GPS.Add(new PointLatLng(__谷歌纬度, __谷歌经度));

                    if (!Equals(_当前地图, GMapProviders.BaiduMap))
                    {
                        __GPS.Add(H坐标转换.bd09_To_Gcj02(q.Lat, q.Lng));
                    }
                    else
                    {
                        __GPS.Add(q);
                    }
                });
                __位置列表.AddRange(__GPS);
                var __线 = new GMapRoute(__GPS, "")
                {
                    Stroke =
                        new Pen(Color.Blue)
                    {
                        Width = 2,
                    }
                };
                _边界图层.Routes.Add(__线);
            });

            if (__位置列表.Count > 0)
            {
                double __最小经度 = 180;
                double __最大经度 = -180;
                double __最小纬度 = 90;
                double __最大纬度 = -90;
                __位置列表.ForEach(q =>
                {
                    __最小经度 = Math.Min(__最小经度, q.Lng);
                    __最大经度 = Math.Max(__最大经度, q.Lng);
                    __最小纬度 = Math.Min(__最小纬度, q.Lat);
                    __最大纬度 = Math.Max(__最大纬度, q.Lat);
                });
                this.out地图.SetZoomToFitRect(RectLatLng.FromLTRB(__最小经度, __最大纬度, __最大经度, __最小纬度));
            }
        }
예제 #2
0
        private static void 读取数据()
        {
            var _程序目录    = Path.GetDirectoryName(Assembly.GetEntryAssembly().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 => new PointLatLng(double.Parse(k.Split(',')[1]), double.Parse(k.Split(',')[0])))
                                                 .ToList()));
                }
            }
        }