|
阅读:1378回复:2
怎么样获得在SceneControl控件中地图的X,Y,Z坐标!
怎么样获得在SceneControl控件中地图的X,Y,Z坐标!
|
|
|
1楼#
发布于:2005-11-10 16:41
<STRONG>SceneControl中使用</STRONG>Locate函数是不能正确返回地理坐标的,(近点位置是正确的),估计是ESRI的BUG,在VBA中使用是完全正确的。
|
|
|
2楼#
发布于:2005-11-08 11:40
LocateMultiple Example'<BR>' Call this method to examine on the 3D Hits in the active viewer.<BR>' For example, from the ArcScene Tools | Customize | Commands | UIControls<BR>' dialog, create a new UIToolControl to allow for mouse clicks, and in the<BR>' UIToolControl's MouseDown event, pass the x and y screen coordinates<BR>' to this method:<BR>'<BR>' Private Sub UIToolControl_MouseDown(ByVal button As Long, ByVal shift As Long, ByVal x As Long, ByVal y As Long)<BR>'<BR>' ReportScreenPick x, y<BR>'<BR>' End Sub<BR>'<BR>Public Sub ReportScreenPick(xScreen As Long, yScreen As Long) ' local variables:<BR> Dim x As Long, y As Long<BR> x = xScreen<BR> y = yScreen<BR> <BR> ' reference ths scenegraph object in the scene:<BR> Dim pSXDoc As ISxDocument<BR> Set pSXDoc = ThisDocument<BR> Dim pSG As ISceneGraph<BR> Set pSG = pSXDoc.Scene.SceneGraph<BR> <BR> ' call the scenegraph's LocateMultiple method for the designated<BR> ' location in the active viewer:<BR> Dim pHits As IHit3DSet<BR> pSG.LocateMultiple pSG.ActiveViewer, x, y, esriScenePickAll, True, pHits<BR> <BR> If pHits Is Nothing Then<BR> MsgBox "No hits were returned."<BR> Exit Sub<BR> End If<BR> <BR> Dim i As Integer<BR> Dim pHit As IHit3D<BR> <BR> MsgBox pHits.Hits.Count ; " hit(s) were returned - review the output in the VBA Immediate Window."<BR> Debug.Print pHits.Hits.Count ; " Hit(s) at screen location " ; x ; ", " ; y ; ":"<BR> <BR> ' for each hit returned, report on its properties:<BR> For i = 0 To pHits.Hits.Count - 1<BR> Set pHit = pHits.Hits.Element(i)<BR> Debug.Print "Hit " ; i + 1<BR> With pHit<BR> If TypeOf .Owner Is ILayer Then<BR> Dim pLayer As ILayer<BR> Set pLayer = .Owner<BR> Debug.Print " Owner(Layer): " ; pLayer.name<BR> End If<BR> <BR> If Not .Object Is Nothing Then<BR> If TypeOf .Object Is IFeature Then<BR> Dim pFeature As IFeature<BR> Set pFeature = .Object<BR> Debug.Print " Feature ID: " ; pFeature.OID<BR> End If<BR> End If<BR> <BR> Debug.Print " Distance from the Observer to the Hit point: " ; .DistanceToObserver<BR> Debug.Print " Distance between the Hit point and the picking ray: " ; .DistanceToRay<BR> Debug.Print " Exact Hit: " ; .ExactHit<BR> Debug.Print " Geographic location: " ; .Point.x ; ", " ; .Point.y ; ", " ; .Point.Z<BR> <BR> Dim nDepthMin As Double, nDepthMax As Double<BR> .GetDepthRange nDepthMin, nDepthMax<BR> Debug.Print " OpenGL Depth Range: " ; nDepthMin ; " - " ; nDepthMax<BR> <BR> End With<BR> <BR> NextEnd Sub<BR>
|
|
|