2013-09-05 5 views
0

Я разрабатываю мобильное приложение с кросс-платформой, которое хранит позиции как географические координаты в db, каждая из которых представляет собой верхний левый угол графического объекта.Географические координаты алгоритма экранных координат

Это приложение содержит элемент управления картой (radmap от telerik), который поддерживает географические координаты, поэтому вы просто добавляете прямоугольник и рисуете его правильно.

Из-за проблем с лицензированием я не могу использовать элемент управления картой в версии для Android (google не позволяет использовать элемент управления картой для бизнес-приложений - https://developers.google.com/maps/faq#tos_commercial, для ios я до сих пор не проверял это), поэтому я буду используйте изображение, которое будет использоваться в качестве фона.

У меня есть левый верхний и нижний правый географические координаты «карты/изображения», и мне нужно рисовать графические объекты внутри области, определенной углами.

Может ли кто-нибудь помочь мне узнать, как преобразовать географические координаты в координаты экрана.

Пример данных (X, Y):

 GEO 

верхний левый угол:

-0,00939846 -0,00504255

Нижний правый угол:

0,009398461 -0,01281023

Очки для рисования:

-0,00464558, -0,00799298

-0,0046509, -0,00845432

-0,00386774, -0,00860988

-0,00344932, -0,00860452

 SCREEN 

Верхний левый угол:

Нижний правый угол:

? ?

Оценочные баллы

? ?

Размер экрана

1024 * 768

Спасибо за помощь,

Луис Pinho

+0

Вы отметили Monodroid и Monotouch. Это на самом деле приложение Xamarin? – manadart

+0

Да, я использую пробную версию Xamarin (на данный момент) и планирую купить лицензию для бизнеса. – lpinho

ответ

2

Я больше всего владеет iOS так это то, что мои ответы. Я пытался сделать как можно больше переменных, чтобы вы могли либо вручную, либо программно переопределить их, не изменяя слишком много другого кода.

- (CGPoint)convertGeoPoint:(CGPoint)point toView:(UIView*)view { 
    CGPoint geoTopLeft = CGPointMake(-0.00939846, -0.00504255); 
    CGPoint geoBottomRight = CGPointMake(0.009398461, -0.01281023); 
    CGFloat geoWidth = geoBottomRight.x - geoTopLeft.x; 
    CGFloat geoHeight = geoBottomRight.y - geoTopLeft.y; 

    // This is the block you would change to suit your needs 
    CGPoint viewTopLeft = CGPointMake(view.frame.origin.x, view.frame.origin.y); 
    CGFloat viewWidth = view.frame.size.width; 
    CGFloat viewHeight = view.frame.size.height; 

    return CGPointMake(viewTopLeft.x + (point.x-geoTopLeft.x)*viewWidth/geoWidth, viewTopLeft.y + (point.y-geoTopLeft.y)*viewHeight/geoHeight); 
} 

Основная идея состоит в том, что вам необходимо преобразовать точку в новую систему координат. Для этого вам необходимо разделить на соответствующий географический размер и умножить на соответствующее измерение вида.

+0

Привет, Сэм, я запускаю ваш код в excel (у меня нет никакого осла, доступного в данный момент, - оставил его в офисе - чтобы запустить его на xCode). И, согласно моим симуляциям, результаты кажутся многообещающими, по крайней мере, те тесты, которые я проверил правильно, используя этот алгоритм. Большое вам спасибо!!! – lpinho

+0

Рад помочь! Дайте мне знать, не закончится ли это так, как вы ожидали. –