在一个程序中要找到固定点附近最近的图元,于是想用SearchNearst。

2015-06-10 10:31:22  访问(1803) 赞(0) 踩(0)

7.在一个程序中要找到固定点附近最近的图元,于是想用SearchNearst。
但是总是出现异常,说"不能对NonEarth坐标系应用Spherical操作"
所以想问一下,MXT04中的SearchNearst方法是不是不支持NonEarth坐标系?
//这个问题在MapXtreme2004的6.0和6.1版本都会有。以后版本会改正。
//暂时解决方案:在经纬度投影坐标系中操作。
   try
   {
    MapInfo.Mapping.Map _map=mapControl1.Map;
    MapInfo.Data.Catalog _catalog=Session.Current.Catalog;
    //打开非地球坐标系的图层,并设置地图坐标系
    mapControl1.Map.Load(new MapTableLoader(@"E:/MapInfo/培训材料/技术培训教材与PPT/MapXtreme2004/示例/OpenTable/MAP_AREA.TAB"));
    Cursor.Current = Cursors.WaitCursor;
    MapInfo.Geometry.CoordSysFactory cf=new MapInfo.Geometry.CoordSysFactory();
    MapInfo.Geometry.CoordSys Nonearth=cf.CreateFromMapBasicString("CoordSys NonEarth Units /"m/" Bounds (-2000000, -2000000) (2000000, 2000000)");
    _map.SetDisplayCoordSys (Nonearth);
    //确定查找点-为非地球坐标的中心点
    MapInfo.Geometry.DPoint pt=new MapInfo.Geometry.DPoint(_map.Center.x,_map.Center.y);
    //将地图坐标系转换为经纬度投影
    MapInfo.Geometry.CoordSys LonLat=cf.CreateFromMapBasicString("CoordSys Earth Projection 1, 0");
    _map.SetDisplayCoordSys (LonLat);
    //将非地球坐标下的查找点转换我经纬度投影下的点
    MapInfo.Geometry.CoordinateTransform Transformer=cf.CreateCoordinateTransform(LonLat,Nonearth);
    MapInfo.Geometry.DPoint dpt=Transformer.CoordSys2ToCoordSys1(pt);
    //设置查找半径
    Distance d = MapInfo.Mapping.SearchInfoFactory.ScreenToMapDistance(_map, 3);
    SearchInfo si = MapInfo.Data.SearchInfoFactory.SearchNearest(dpt, LonLat, d);
    IResultSetFeatureCollection fc = _catalog.Search("MAP_AREA", si);
    Session.Current.Selections.DefaultSelection.Add(fc);
   }
   finally
   {
    Cursor.Current = Cursors.Default;
   }


标签:在一个程序中要找到固定点附近最近的图元,于是想用SearchNearst。 

上一条:

下一条:


 

相关评论

评论加载中……
 

发表评论

类型:
内容:
  (Alt+Enter)