Какой Android API я должен использовать? Простое картографическое приложение

#java #android #google-maps-api-3

#java #Android #google-maps-api-3

Вопрос:

Буду ли я использовать стандартный map API? Причина, по которой я спрашиваю, заключается в том, что я хотел бы, чтобы карта была пользовательским изображением моего кампуса, которое я сделал в Photoshop. Я обнаружил, что кто-то в другом университете сделал нечто подобное. Как бы я мог создать что-то подобное?

http://s3.appbrain.com/screen?id=2110362890445967243amp;i=1

Должно ли что-то подобное быть отключено? Может ли оно по-прежнему указывать ваше текущее географическое местоположение? Спасибо.

Ответ №1:

Я делал это в прошлом, это не слишком сложно.

Забудьте о Map API. Вам просто нужно точно масштабированное изображение области, которую вы хотите нанести на карту.

Вам просто нужны долгота и широта четырех углов, а также ширина и высота изображения. Получив его, вы можете выполнить относительно простую математику для преобразования GPS-координат телефона в точки X, Y на изображении.

Я сделал это с мультяшным изображением Грант-парка в Чикаго для приложения Android Lollapalooza в 2010 году. На самом деле моя проблема была немного сложнее, потому что карта была сжата по вертикали и слегка сдвинута на несколько градусов, поэтому моя математика добавила, чтобы приспособиться к этому. Если вы просто создаете прямой снимок сверху, это должно быть довольно просто.

Вот служебная функция, которую я использовал для преобразования значений длины / широты в точку. Это будет не совсем то, что вам нужно, потому что у него были определенные значения, которые были связаны с изображением, которое я использовал, но, возможно, оно поможет вам двигаться в правильном направлении.

 public static PointF GPSToMap(double latitude, double longitude, 
        double minLat, double minLon, double maxLat, double maxLon,
        long width, long height, String xExpr, String yExpr)
{
    double numerator;
    double denominator;

    numerator = latitude - minLat;
    denominator = maxLat - minLat;
    double x = width - ((numerator/denominator*width));
    numerator = longitude - minLon;
    denominator = maxLon - minLon;
    double y = height - ((numerator/denominator*height));

    Double dblX = new Double(x (y*0.434026)-((x-100)*0.180));
    Double dblY = new Double(y*0.99);

    MathEval math = new MathEval();

    dblY  = math.evaluate(yExpr); //-40
    dblX  = math.evaluate(xExpr); //-15
    return new PointF(dblX.floatValue(), dblY.floatValue());
}
  

Комментарии:

1. Просто подумал, что я бы добавил, xExpr и yExpr, где строковые значения, состоящие из математической формулы. Это было сделано для того, чтобы, добравшись до Грант-парка, я мог прогуляться по парку, снять показания GPS и скорректировать свою математическую формулу на лету без необходимости повторного развертывания приложения.

2. Класс MathEval находится здесь www.softwaremonkey.org/Code/src/MathEval.java

3. Спасибо, что поделились этим кодом, он наверняка поможет людям.

4. К вашему сведению, мой класс MathEval недавно был значительно обновлен и улучшен.

Ответ №2: