本人初学MO,现在用C#做一个中国地图的练习,现已知道怎样显示地理坐标和投影坐标,用GeoCoordSys和ProjCoordSys。使用如下代码设置地图使用地理坐标系显示。
ESRI.MapObjects2.Core.GeoCoordSys gcs = new GeoCoordSysClass();
gcs.Type = GeographicCoordSysConstants.moGeoCS_WGS1984;
axMap1.CoordinateSystem = gcs;但是给地图使用这些坐标系后,添加标记点功能就不好用了(不设置地图坐标系时,添加标记点功能好用的)请问如何解决此问题?
另外看教程说可以转换坐标系,但是给的例子都是VB的代码,看不懂,能给C#代码就更好了,请高手帮忙,指点。

解决方案 »

  1.   


    MapObjects2.ProjCoordSys csmap=new MapObjects2.ProjCoordSysClass();//定义投影坐标系//moProjCS_World_WinkelII类型的坐标系就是我喜欢的那种带弧度的,哈哈//moProjCS_World_PlateCarree类型的坐标系是MO默认的那种直直的,:)csmap.Type = MapObjects2.ProjectedCoordSysConstants.moProjCS_World_WinkelII;//设置坐标系类型axMap1.CoordinateSystem = csmap;//改变地图的坐标系参考http://blog.csdn.net/blue_bat/archive/2004/08/09/68928.aspx
      

  2.   

    上面的代码只是设定地图的坐标系,不是转换,我要实现的是
    将地图设定GeoCoordSys,转换成ProjCoordSys的坐标。
    就像两张地图,其中一张使用GeoCoordSys,另一张使用ProjCoordSys
    由于地图使用GeoCoordSys或ProjCoordSys,显示的地图样子是不一样的,
    随便在一张地图中标记一个点,在另一张地图上的相应位置上也标记出来。
      

  3.   

    谁能将GeoCoordSys坐标系的坐标转换为ProjCoordSys坐标系的坐标?
    或者将ProjCoordSys坐标系的坐标转换为GeoCoordSys坐标系的坐标?要C#代码,不要VB的代码。
      

  4.   

    这个 地图应该自带坐标系吧,只是屏幕坐标与地图坐标的转换MapObjects2.Point op = new MapObjects2.Point();
    //屏幕坐标转换为地图坐标
    op = axMap1.ToMapPoint((float)e.x, (float)e.y);  //e.x与e.y是屏幕坐标
    地图坐标转换为屏幕坐标好像是
    pt = axMap1.ToScreenPoint(op.x op.y);  
    你试一下吧
      

  5.   

    设置地理坐标系(GeoCoordSys)获取的坐标和设置投影坐标系(ProjCoordSys)获取的坐标值是不一样的,所以想互相转换。2个AXMAP控件,2个控件里使用同一张地图文件,但2个控件设置的坐标系不同,一个设置投影坐标系(ProjCoordSys),另一个设置地理坐标系(GeoCoordSys)。然后随便在一张地图中标记一个点,在另一张地图上的相应位置上也标记出来。
      

  6.   

    设置地理坐标系(GeoCoordSys)的地图,会将地图拉宽,
    设置投影坐标系(ProjCoordSys)的地图,会将地图向右上方旋转一定角度。
    因此两张地图显示是不一样的。由于两张地图显示的不一样,依靠屏幕坐标转换地图坐标,定位不准,在设置地理坐标系地图上找到北京市的屏幕坐标和在投影坐标系地图上北京市的屏幕坐标是不一样的。因此需要在两种坐标系之间转换。
      

  7.   


    Dim fromPT as New MapObjects2.point
    Dim toPT as New MapObjects2.point
    Dim curMap as New Integer
    Dim sym PT as New MapObjects2.Symbol
    Dim gcs as New MapObjects2.GeoCoordSys
    Dim pcs as New MapObjects2.ProjCoordSysPrivate Funtion transformPoint(direction as MapObjects2.DirectionConstants,ptln 
     as MapObjects2.Point)as Point
     Dim myGT as New MapObjects2.GeoTransformation
     Dim gcsBJ54 as New MapObjects2.GeoCoordSys
     Dim gceWGS54 as New MapObjects2.GeoCoordSys
     gcsBJ54.Type=moGeoCS_Beijing1954
     gceWGS54.Type=moGeoCS_WGS1984
     Set myGT.ToGeoCoordSys=gcsWGS84
     Set myGT.FromGeoCoordSys=gcsBJ54
     myGT.Method=moMethod_PositionVector
     myGT.direction=moDirection_Forward
     myGT.Name="BJ54_To_WGS984"
     myGt.direction=direction
     Dim map1Projected as Boolean
     Dim map2Projected as Boolean

     If Map1.CoordinateSystem.IsProjected Then
        map1Projected=True
     Else
    map1Projected=FalseEnd IfIf Map2.CoordinateSystem.IsProjected Then
       map2Projected=True
     Else
       map2Projected=FalseIf direction=moDirection_Forward Then
     If map1Projected Then
    myGT.FromGeoCoordSys=Map1.CoordinateSystem.GeoCoordSys
    Else
    myGT.FromGeoCoordSys=Map1.CoordinateSystem
    End If
    If map2Projected Then
    msGT.ToGeoCoordSys=Map2.CoordinateSystem.GeoCoordSys
    Else
    msGT.ToGeoCoordSys=Map2.CoordinateSystem
    End If
    Set transformPoint=
    Map2.CoordinateSystem.Transform(Map1.CoordinateSystem,fromPt,,myGT)ElseIf direction=moDirection_Reverse Then
    If map1Projected Then
    msGT.ToGeoCoordSys=Map1.CoordinateSystem.GeoCoordSys
    Else
    msGT.ToGeoCoordSys=Map1.CoordinateSystem
    End If
    If map2Projected Then
    myGT.FromGeoCoordSys=Map2.CoordinateSystem.GeoCoordSys
    Else
    myGT.FromGeoCoordSys=Map2.CoordinateSystem
    End If
    Set transformPoint=
    Map2.CoordinateSystem.Transform(Map2.CoordinateSystem,fromPt,,myGT)
    End If
      

  8.   

    谢谢楼上的,可惜是VB代码。。
    有高手翻译成C#代码的也行,有知道的到下面的帖子里回答。谢谢!http://topic.csdn.net/u/20091215/19/f8f08ce8-477f-4918-8679-f493d3b3efa4.html