Esempio n. 1
0
        public override ChinaArea Position(MapPoint point)
        {
            if (this.Rects == null && (this.Area == null || this.Area.Length == 0))
            {
                return(null);
            }

            ChinaArea area = null;

            if (this.Rects != null && this.Rects.Length > 0)
            {
                area = base.Position(point);
                if (area != null && Area != null && Area.Length > 0)
                {
                    foreach (var a in Area)
                    {
                        if (a.Name.EndsWith("市辖区"))
                        {
                            continue;
                        }
                        var piecearea = a.Position(point);

                        if (piecearea != null)
                        {
                            area = piecearea;
                            break;
                        }
                    }
                }
            }
            else if (Area != null && Area.Length > 0)
            {
                foreach (var a in Area)
                {
                    if (a.Name.EndsWith("市辖区"))
                    {
                        continue;
                    }
                    var piecearea = a.Position(point);

                    if (piecearea != null)
                    {
                        area = piecearea;
                        break;
                    }
                }
            }

            return(area);
        }
Esempio n. 2
0
        static void AddPostion(ChinaArea positon)
        {
            var key = Thread.CurrentThread.ManagedThreadId;
            List <ChinaArea> list = null;

            if (PositionDic.TryGetValue(key, out list))
            {
                list.Add(positon);
            }
            else
            {
                list = new List <ChinaArea>();
                list.Add(positon);
                PositionDic.TryAdd(key, list);
            }
        }
Esempio n. 3
0
        public override ChinaArea Position(MapPoint point)
        {
            if (this.Rects == null && (this.Cities == null || this.Cities.Length == 0))
            {
                return(null);
            }

            ChinaArea area = null;

            if (this.Rects != null && this.Rects.Length > 0)
            {
                area = base.Position(point);
                if (area != null && Cities != null && this.Cities.Length > 0)
                {
                    foreach (var a in Cities)
                    {
                        var piecearea = a.Position(point);

                        if (piecearea != null)
                        {
                            area = piecearea;
                            break;
                        }
                    }
                }
            }
            else if (this.Cities != null && this.Cities.Length > 0)
            {
                foreach (var a in Cities)
                {
                    var piecearea = a.Position(point);

                    if (piecearea != null)
                    {
                        area = piecearea;
                        break;
                    }
                }
            }

            return(area);
        }
Esempio n. 4
0
        public static ChinaArea GetNearPosition(MapPoint point)
        {
            var key = Thread.CurrentThread.ManagedThreadId;
            List <ChinaArea> list    = null;
            ChinaArea        minitem = null;
            var min    = double.MaxValue;
            var radlat = Rad(point.Y);
            var radlon = Rad(point.X);

            if (PositionDic.TryGetValue(key, out list))
            {
                list = list.Select(p => p).ToList();
                foreach (var item in list)
                {
                    if (item is Province)
                    {
                        var cities = (item as Province).Cities;
                        if (cities == null)
                        {
                            foreach (var pts in item.MapPointsList)
                            {
                                foreach (var pt in pts)
                                {
                                    var dis = CalDistance2(radlat, radlon, Rad(pt.Y), Rad(pt.X));
                                    if (dis < min)
                                    {
                                        min     = dis;
                                        minitem = item;
                                    }
                                }
                            }

                            continue;
                        }
                        foreach (var city in cities)
                        {
                            var ct = city.Position(point);
                            if (ct != null)
                            {
                                return(ct);
                            }

                            foreach (var pts in city.MapPointsList)
                            {
                                foreach (var pt in pts)
                                {
                                    var dis = CalDistance2(radlat, radlon, Rad(pt.Y), Rad(pt.X));
                                    if (dis < min)
                                    {
                                        min     = dis;
                                        minitem = city;
                                    }
                                }
                            }
                        }
                    }
                }
                if (min < 100000)
                {
                    return(minitem);
                }
                return(null);
            }
            else
            {
                return(null);
            }
        }