当前位置:软件学习 > 其它软件 >>

MapObject 地图坐标系转换

本人初学MO,现在用C#做一个中国地图的练习,现已知道怎样显示地理坐标和投影坐标,用GeoCoordSys和ProjCoordSys。 

使用如下代码设置地图使用地理坐标系显示。 
ESRI.MapObjects2.Core.GeoCoordSys gcs = new GeoCoordSysClass(); 
gcs.Type = GeographicCoordSysConstants.moGeoCS_WGS1984; 
axMap1.CoordinateSystem = gcs; 

但是给地图使用这些坐标系后,添加标记点功能就不好用了(不设置地图坐标系时,添加标记点功能好用的) 

请问如何解决此问题? 
另外看教程说可以转换坐标系,但是给的例子都是VB的代码,看不懂,能给C#代码就更好了, 

请高手帮忙,指点。

转贴的先看一下下面的帖子,里面有的就不用转了,谢谢!
http://topic.csdn.net/u/20091026/14/715b9666-bd1b-429e-a020-fd94f4a3c0d9.html


--------------------编程问答-------------------- 地图坐标系应该跟数据坐标系吻合吧!!! --------------------编程问答-------------------- 数据坐标系是什么?
我只知道设置地理坐标系(GeoCoordSys)和设置投影坐标系(ProjCoordSys)。
--------------------编程问答-------------------- MO没怎么用过.
MapX的话,添加标注的图层 有 范围设置的。不在范围内的会添加不了
不知道MO是不是也有这个问题 --------------------编程问答-------------------- MapObjects2.GeoTransformation
这个类有会用的么?
教程上就是用这个类转换的。
可惜是VB的代码看不太懂。 --------------------编程问答-------------------- 把VB代码贴出来,大家帮你翻译。 --------------------编程问答--------------------

Dim fromPT as New MapObjects2.point
Dim toPT as New MapObjects2.point
Dim curMap as Integer
Dim sym PT as New MapObjects2.Symbol
Dim gcs as New MapObjects2.GeoCoordSys
Dim pcs as New MapObjects2.ProjCoordSys

Private Funtion transformPoint(direction As MapObjects2.DirectionConstants,ptln 
 As MapObjects2.Point)As Point
 'Here ,an appropriate GeoTransformation is created for transforming the selected
 'Point.This should be changed appropriately for the CoordinateSystem of your Map2 MapLayer.
 Dim myGT as New MapObjects2.GeoTransformation

 Dim gcsBJ54 as New MapObjects2.GeoCoordSys
 Dim gceWGS84 as New MapObjects2.GeoCoordSys

 gcsBJ54.Type=moGeoCS_Beijing1954
 gceWGS84.Type=moGeoCS_WGS1984
 
 Set myGT.ToGeoCoordSys=gcsWGS84
 Set myGT.FromGeoCoordSys=gcsBJ54
 myGT.Method=moMethod_PositionVector
 
 myGT.SetParameter moParm_DeltaX,24
 myGT.SetParameter moParm_DeltaY,-123
 myGT.SetParameter moParm_DeltaZ,-94

 myGT.SetParameter moParm_RotationX,-0.02
 myGT.SetParameter moParm_RotationY,-0.25
 myGT.SetParameter moParm_RotationZ,-0.13
 myGT.SetParameter moParm_DeltaScale,1

 myGT.direction=moDirection_Forward
 myGT.Name="BJ54_To_WGS1984"

'myGT.Type=moGeoTransformation_Tokyo_To_WGS1984_3

'Set the appropriate direction,FromGeoCoordSys and ToGeoCoordSys
 myGT.direction=direction

'A CoordinateSystem may be either ProjCoordSys or GeoCoordSys.
'We need to check if the type before assigning the FromGeoCoordSys and ToGeoCoordSys
 Dim map1Projected as Boolean
 Dim map2Projected as Boolean

 If Map1.CoordinateSystem.IsProjected Then
    map1Projected=True
 Else
map1Projected=False

End If

If Map2.CoordinateSystem.IsProjected Then
   map2Projected=True
 Else
   map2Projected=False
End If

'If changing from WGS1984 to other datum
If 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

End Function
--------------------------------------------------------------------
Private Sub Map1_AfterTrackingLayerDraw(ByVal hDC As stdole.OLE_HANDLE)
If(Not fromPt Is Nothing) And curMap =1 Then
sym.Color=moBlue
Map1.DrawShape fromPt,sym
End If
If(Not toPt Is Nothing) And curMap=2 Then
sym.Color=moRed
Map1.DrawShape toPt,sym
End If
End Sub
----------------------------------------------------------------------
Private Sub Map1_MouseDown(Button As Integer,Shift As Integer,X As Single,Y As Single)
Set fromPt =Map1.ToMapPoint(X,Y)
Set toPt=transformPoint(moDirection_Forward,fromPt)
curMap=1
Map1.TrackingLayer.Refresh(true)
Map2.TrackingLayer.Refresh(true)
End Sub
-----------------------------------------------------------------------
Private Sub Map2_AfterTrackingLayerDraw(ByVal hDC As stdole.OLE_HANDLE)
If(Not fromPt Is Nothing) And curMap =2 Then
sym.Color=moBlue
Map2.DrawShape fromPt,sym
End If
If(Not toPt Is Nothing) And curMap=1 Then
sym.Color=moRed
Map2.DrawShape toPt,sym
End If
End Sub
----------------------------------------------------------------------
Private Sub Map2_MouseDown(Button As Integer,Shift As Integer,X As Single,Y As Single)
Set fromPt =Map2.ToMapPoint(X,Y)
Set toPt=transformPoint(moDirection_Reverse,fromPt)
curMap=2
Map1.TrackingLayer.Refresh(true)
Map2.TrackingLayer.Refresh(true)
End Sub
-----------------------------------------------------------------------
Private Sub Form_Load()
'Map1 should contain a MapLayer based on the WGS1984 Datum,for example the World Countries sample dataset.
Dim dc1 As New MapObjects2.DataConnection
Dim mlyr1 As New MapObjects2.MapLayer
Dim mlyr2 As New MapObjects2.MapLayer

dc1.Database=App.Path
Set mlyr1.GeoDataset=dc1.FindGeoDataset("china")
Map1.Layers.Add mlyr1

Set mlyr2.GeoDataset = dc1.FindGeoDataset("china_prj")
Map2.Layers.Add mlyr2

'Map2 should contain a MapLayer based on a different Datum
'You should ensure the CoordinateSystem of both layers is set correctly.
pcs.Type=moProjCS_Beijing1954GK_17N
Map2.Layers(0).CoordinateSystem=pcs

gcs.Type=moGeoCS_WGS1984
Map1.Layers(0).CoordinateSystem=gcs

'Here the CoordinateSystem of each map is set to the CoordinateSystem of its MapLayer
Map1.CoordinateSystem=Map1.Layers(0).CoordinateSystem

Map2.CoordinateSystem=Map2.Layers(0).CoordinateSystem


With sym
.SymbolType=moPointSymbol
.Size=4
.Outline=False
.Style=moTriangleMarker
End With
End Sub
--------------------编程问答-------------------- 请高手帮忙翻译成C#代码,感激不尽! --------------------编程问答-------------------- mark --------------------编程问答-------------------- 唉!哪个高手来帮帮忙啊 !!! --------------------编程问答-------------------- 回复内容太短了!  学习...
补充:企业软件 ,  地理信息系统
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,