2013-07-23 4 views
0

У меня проблема: у меня есть карта Owen на моем устройстве. Теперь я получаю фактическую GPS-позицию от провайдера GPS и нарисую эту точку на своей карте. Если я вычислил следующее, то DrawPoint будет где угодно. Что не так?Android - показать точку GPS в карте Owen

XMapScreen = 100; 
YMapScreen = 200; 
XMapGPS = 50.598886; 
YMapGPS = 11.994318; 

dLat = arg0.getLatitude(); 
dLon = arg0.getLongitude(); 

PointToDrawX = ((dLat * XMapScreen)/XMapGPS); 
PointToDrawY = ((dLon * YMapScreen)/YMapGPS); 
+0

Что такое карта owen? – doubleDown

+0

карта у меня есть в Photoshop – bastiZR

+0

Вы пытаетесь преобразовать координаты gps в пиксель на экране? – nayab

ответ

0

Вы должны хранить широта, долгота координаты вашего OW (е) п карта левого нижнего угла (SW) и правый верхний (NW).

Затем вы можете рассчитать X-Width = продольное расстояние и y-height = latitudSpan вашей карты.

Убедитесь, что ваша собственная карта имеет North Up. Остальное должно быть простым.

Но это работает только для небольших карт. Около 10 км, может быть, немного больше.

+0

ОК, и если у меня есть пролет, что мне делать дальше? Извините за мой плохой английский xD – bastiZR

+0

Для такой задачи необходим минимум математики: вы должны знать, как линеаризовать интерполяцию, как вычислить коэффициент преобразования (например, screenWidth/longitdueSpan). попробуйте сначала на бумаге: предположим, что ширина экрана и высота = 100 * 100, и имеют точку в середине карты. – AlexWien

+0

но как я могу это сделать? – bastiZR

0

ОК, я следующее:

double dLat = arg0.getLatitude(); //GPS Position 
    double dLon = arg0.getLongitude(); //GPS Position 

    double latLeftLower = 50.58731; 
    double lonLeftLower = 11.992316; 

    double latRightUpper = 50.593509; 
    double lonRightUpper = 11.998522; 

    double dLatSpan = latRightUpper-latLeftLower; 
    double dLonSpan = lonRightUpper-lonLeftLower; 

    double dScreenWidth = ivMap.getWidth(); 
    double dScreenHeight = ivMap.getHeight(); 

    double dLatFactor = dScreenWidth/dLatSpan; 
    double dLonFactor = dScreenHeight/dLonSpan; 

    Log.i("GPS", "location changed: lat="+lat+", lon="+lon); 
    double xDraw = ((dLat * dScreenWidth)/dLatSpan)/dLatFactor; 
    double yDraw = ((dLon * dScreenHeight)/dLonSpan)/dLonFactor; 

Но thast не так !? Почему?

Спасибо и извините за мой английский

+0

Теперь выглядит лучше, что не так? Напишите случай с трубкой Junit, и попробуйте со всеми браузерами и средним экраном. – AlexWien

Смежные вопросы