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); }
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); } }
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); }
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); } }