Esempio n. 1
0
        /// <summary>
        /// 設置行政區
        /// </summary>
        /// <param name="district"></param>
        public void SetRegionData(District district)
        {
            // 分割區域
            m_district = district;
            var lt = m_district.LeftTop.GetMercatorPoint();
            var rb = m_district.RightBottom.GetMercatorPoint();

            var zoom = lt.Zoom;

            while (((rb.GetTilePoint().X - lt.GetTilePoint().X) > 2) || ((lt.GetTilePoint().Y - rb.GetTilePoint().Y) > 2))
            {
                zoom--;
                lt = lt.GetMercatorPoint(zoom);
                rb = rb.GetMercatorPoint(zoom);
            }

            // 加载瓦片
            Tiles.Clear();
            var tilePoint = lt.GetTilePoint();

            Tiles.Add(new BitmapImage(new Uri(tilePoint.Address)));
            Tiles.Add(new BitmapImage(new Uri(tilePoint.Right.Address)));
            Tiles.Add(new BitmapImage(new Uri(tilePoint.Right.Right.Address)));
            Tiles.Add(new BitmapImage(new Uri(tilePoint.Bottom.Address)));
            Tiles.Add(new BitmapImage(new Uri(tilePoint.Bottom.Right.Address)));
            Tiles.Add(new BitmapImage(new Uri(tilePoint.Bottom.Right.Right.Address)));
            Tiles.Add(new BitmapImage(new Uri(tilePoint.Bottom.Bottom.Address)));
            Tiles.Add(new BitmapImage(new Uri(tilePoint.Bottom.Bottom.Right.Address)));
            Tiles.Add(new BitmapImage(new Uri(tilePoint.Bottom.Bottom.Right.Right.Address)));

            // 加载区域線段
            var wrappers = new ConcurrentBag <MapLineWrapper>();

            Parallel.ForEach(m_district.Regions,
                             region =>
            {
                var points = region.Points.Select(o => o.GetMercatorPoint(zoom)).ToList();
                Parallel.For(0,
                             points.Count - 1,
                             index =>
                {
                    var point1 = new MapPointWrapper
                    {
                        X = points[index].X - tilePoint.X * 256,
                        Y = tilePoint.Y * 256 - points[index].Y + 256
                    };

                    var point2 = new MapPointWrapper
                    {
                        X = points[index + 1].X - tilePoint.X * 256,
                        Y = tilePoint.Y * 256 - points[index + 1].Y + 256
                    };
                    wrappers.Add(new MapLineWrapper(point1, point2));
                });
            });
            RegionLines = new ObservableCollection <MapLineWrapper>(wrappers);
        }
Esempio n. 2
0
 /// <summary>
 /// 构造函数
 /// </summary>
 public MapLineWrapper(MapPointWrapper p1, MapPointWrapper p2)
 {
     Point1 = p1;
     Point2 = p2;
 }