// Как нарисовать PNG на axaxcMapScreen по заданным в WGS_84 координатам // КАК ПОЛУЧИТЬ КООРДИНАТЫ В ПИКСЕЛЯХ ? // ФУНКЦИЯ mapMapToPicture ОТРАБАТЫВАЕТ - КАК ИНТЕРПРЕТИРОВАТЬ РЕЗУЛЬТАТ ? // КАК ПРАВИЛЬНО НАЙТИ iCrossLeftM iCrossTopM : КООРДИНАТЫ В ПИКСЕЛЯХ // ДЛЯ ОТОБРАЖЕНИЯ PNG НА КАРТЕ ПРИ ПОМОЩИ DrawImage
Rectangle CrossRect; Bitmap ico_place;
ico_place = new Bitmap(@"C:\MAPS_OBJECT\BMP\ZNACHEK.png");
Не дождался ответа -> Сам себе ответил: преобразовал градусы в радианы, затем в метры, из метров в пиксели и нарисовал PNG в нужном месте. Но такая штука работает только когда вся карта помещается в окно. А когда карта увеличена и показывается частями -> Как учитывать масштаб и положение карты в окне Остался вопрос -> Что пересчитывать: положение , разрешение пикселей или неверная работа функции преобразования метровых координат в пиксели ?
Функция mapMapToPicture - это пересчет из дискретов карты к писселям экрана. Вам нужно пересчитывать между WGS84 и пикселами. Рекомендую использовать метод самого компонента MapView или MapScreen - ConvertMetric, в Вашем случае - из PP_GEOWGS84 в PP_PICTURE.
Переведенные в пиксели координаты имеют точку отсчета от верхнего левого угла карты и уже учитывают масштаб отображения. Поэтому, чтобы Вам отсчитывать координаты от угла окна отображения карты, необходимо вычесть смещение от угла карты. Это свойства MapLeft и MapTop.
Цитата
преобразовал градусы в радианы, затем в метры, из метров в пиксели
Такое сработает только если у Вас карта на эллипсоиде WGS84. Просто преобразование из градусов/радианов (функциями без указания WGS84) выполняется в системе карты!
Alex Lesnov написал: Опять сам себе ответил -> учитываю .MapTop и .MapLeft и попадаю и рисую.Больше на форумы не ходок - всем пока.
Код
aPlaceInp = axGisToolKit.TxPPLACE.PP_GEOWGS84;
aPlaceOut = axGisToolKit.TxPPLACE.PP_PICTURE;
aX = M_PI*48.00/180.0;
aY = M_PI*35.00/180.0;
axcMapScreen.ConvertMetric(aX, aY, aPlaceInp, aPlaceOut);
в этом месте aX и aY будут в координата отображения.