本人初学MO,现在用C#做一个中国地图的练习,现已知道怎样显示地理坐标和投影坐标,用GeoCoordSys和ProjCoordSys。使用如下代码设置地图使用地理坐标系显示。
ESRI.MapObjects2.Core.GeoCoordSys gcs = new GeoCoordSysClass();
gcs.Type = GeographicCoordSysConstants.moGeoCS_WGS1984;
axMap1.CoordinateSystem = gcs;但是给地图使用这些坐标系后,添加标记点功能就不好用了(不设置地图坐标系时,添加标记点功能好用的)请问如何解决此问题?
另外看教程说可以转换坐标系,但是给的例子都是VB的代码,看不懂,能给C#代码就更好了,请高手帮忙,指点。
ESRI.MapObjects2.Core.GeoCoordSys gcs = new GeoCoordSysClass();
gcs.Type = GeographicCoordSysConstants.moGeoCS_WGS1984;
axMap1.CoordinateSystem = gcs;但是给地图使用这些坐标系后,添加标记点功能就不好用了(不设置地图坐标系时,添加标记点功能好用的)请问如何解决此问题?
另外看教程说可以转换坐标系,但是给的例子都是VB的代码,看不懂,能给C#代码就更好了,请高手帮忙,指点。
解决方案 »
- 数据恢复
- 正则表达式如何匹配多组格式相同的数据
- 问一个stting类型转换为int的问题?
- 无法找到类型或命名空间FileSystemEntry
- Windows Media Player控件怎么添加!?
- 给XML节点添加属性的问题。
- 关于WinForm程序内基于判断改变WebServer连接的方法?
- 请问一下:c#在程序运行时,如果我在控件pictureBox中绘制础一些线条的话,当程序窗体被其它窗体覆盖后,线条就没有了,如何解决?
- DataGrid当处于编辑状态的时候,如何不显示删除按钮列?
- 请教C#绘图事件PaintEventArgs是不是不停在重绘呀
- 关于datagridview与Excel相互转换的一些问题
- 不知道在那里问合适,就这里吧
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
将地图设定GeoCoordSys,转换成ProjCoordSys的坐标。
就像两张地图,其中一张使用GeoCoordSys,另一张使用ProjCoordSys
由于地图使用GeoCoordSys或ProjCoordSys,显示的地图样子是不一样的,
随便在一张地图中标记一个点,在另一张地图上的相应位置上也标记出来。
或者将ProjCoordSys坐标系的坐标转换为GeoCoordSys坐标系的坐标?要C#代码,不要VB的代码。
//屏幕坐标转换为地图坐标
op = axMap1.ToMapPoint((float)e.x, (float)e.y); //e.x与e.y是屏幕坐标
地图坐标转换为屏幕坐标好像是
pt = axMap1.ToScreenPoint(op.x op.y);
你试一下吧
设置投影坐标系(ProjCoordSys)的地图,会将地图向右上方旋转一定角度。
因此两张地图显示是不一样的。由于两张地图显示的不一样,依靠屏幕坐标转换地图坐标,定位不准,在设置地理坐标系地图上找到北京市的屏幕坐标和在投影坐标系地图上北京市的屏幕坐标是不一样的。因此需要在两种坐标系之间转换。
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
有高手翻译成C#代码的也行,有知道的到下面的帖子里回答。谢谢!http://topic.csdn.net/u/20091215/19/f8f08ce8-477f-4918-8679-f493d3b3efa4.html