Доброго времени суток всем!
Имеется вопрос: необходимо сделать выборку по карте (аналог select features), но по контуру, координаты которого задаются с клавиатуры (в градусах). Для этого я записываю необходимое количество точек Ipoint в IPointCollection, по ней потом строю IGeometry, и потом полученную геометрию использую в качестве атрибута в SelectByShape. При этом, если я записываю в IPoint x и y в градусах - результат выборки получается неправильный (map units - метры), если я в IPoint записываю DisplayTransformation.ToMapPoint(x,y), результат тоже неправильный (объекты в нужной области не подсвечиваются). Но если я в свойствах DataFrame поменяю Display Units с градусов на метры, ручками с карты сниму показания и их запишу в iPoint, результат выборки будет корректным.
Собственно, вопрос: как программным способом преобразовать десятичные градусы в метры карты?
Вот образец кода:
Dim pMxApp As IMxApplication
Dim pMxDoc As IMxDocument
Dim pGeom As IGeometry
Dim pPoint1 As IPoint
Dim pPoint2 As IPoint
Dim pPoint3 As IPoint
Dim pPoint4 As IPoint
Set pPoint1 = New Point
Set pPoint2 = New Point
Set pPoint3 = New Point
Set pPoint4 = New Point
Set pMxApp = Application
Set pMxDoc = ThisDocument
'///вариант первый, правильный, координаты сняты с карты, Display Units - meters
'pPoint1.PutCoords -2124004, 1327395
'pPoint2.PutCoords -2299667, 989938
'pPoint3.PutCoords -1999191, 846634
'pPoint4.PutCoords -1897491, 1202582
'///вариант второй, некорректный, возвращенные координаты отличаются от первого случая на порядок
Set pPoint1 = pMxDoc.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(63, 56)
Set pPoint2 = pMxDoc.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(64, 53)
Set pPoint3 = pMxDoc.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(70, 53)
Set pPoint4 = pMxDoc.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(70, 56)
'///вариант третий, координаты сняты с карты, Display Units - Decimal Degrees
'pPoint1.PutCoords 63, 56
'pPoint2.PutCoords 64, 53
'pPoint3.PutCoords 70, 53
'pPoint4.PutCoords 70, 56
Dim pPolygonPointColl As IPointCollection
Set pPolygonPointColl = New Polygon
pPolygonPointColl.AddPoint pPoint1
pPolygonPointColl.AddPoint pPoint2
pPolygonPointColl.AddPoint pPoint3
pPolygonPointColl.AddPoint pPoint4
pPolygonPointColl.AddPoint pPoint1 'Add the first point again to close
Set pGeom = pPolygonPointColl
pMap.SelectByShape pGeom, pMxApp.SelectionEnvironment, False
pMxDoc.ActiveView.PartialRefresh esriViewGeoSelection, Nothing,
Подскажите пожалуйста, может, я чего пропустил?