I want to transform map coords into page coords in ArcObjects in Python. So I do, say:
>>> pApp = NewObj(esriFrame.AppROT, esriFrame.IAppROT).Item(0)
>>> pDoc = pApp.Document
>>> pMxDoc = CType(pDoc, esriMapUI.IMxDocument)
>>> pDisplay = pMxDoc.ActiveView.ScreenDisplay # something wrong here?
>>> pDisTrans = pDisplay.DisplayTransformation
>>> pageX, pageY = pDisTrans.FromMapPoint(ptInRealCoords) # coords are ~389700,~316671m
>>> pageX
6523059 # which should be ~4.73 in cm
Any clues whats wrong?
Answer
IScreenDisplay
's IDisplayTransformation.FromMapPoint transforms active view's coordinates into device coordinates (i.e. pixels). Moreover, you are accessing pMxDoc.ActiveView
which will vary depending on whether you are in data view or page view. This means that the source unit space will be either map units or page units.
If you want to transform a coordinates in a certain map into page coordinates on the page layout you need:
- Transform the map's coordinates to the device space (i.e. cast the particular map as
IActiveView
and use its screen display's transformation,FromMapPoint
). - Transform the obtained device coordinates into page coordinates (i.e. cast the document's page layout as
IActiveView
and use its screen display transformation,ToMapPoint
). Note that the nameToMapPoint
here is slightly misleading as the "map point" here actually means page coordinates.
No comments:
Post a Comment