Lat длинные координаты неправильно отображаются в обработке 3, необходимо вращение - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь сделать очень простой эскиз Processing 3, в котором я намечаю координаты широты и долготы, по которым отслеживаются мои часы на велосипеде.

Я могу анализировать данные XML систочник местоположения, и я настроил папку данных с файлом XML.Кажется, у меня нет проблем с синтаксическим анализом данных.

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

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

Я прикрепил изображение.Левое изображение - это то, как оно выглядит, а Правое изображение - то, как оно должно выглядеть.Похоже, что точки / GPS нужно повернуть на 90 градусов против часовой стрелки.

enter image description here

Может быть, это что-то с моей картой ()?

// convert and remap Lat and Long based on range
// -122.5367,37.6659,-122.3383,37.8174
float mainx = map(pointLat, 37.6659, 37.8174, 0, width); 
float mainy = map(pointLong, -122.5367, -122.3383, 0, height); 

В любом случае, вот мой код обработки.Любая помощь приветствуется, так как я застрял, и я думаю, что это последнее, что нужно исправить.

Спасибо!Аарон

// Example XML
//<Workout workoutActivityType="HKWorkoutActivityTypeCycling" duration="44.19382538398107" durationUnit="min" totalDistance="7.644061515836529" totalDistanceUnit="mi" totalEnergyBurned="300.3060000000002" totalEnergyBurnedUnit="kcal" sourceName="Aaron’s Apple Watch" sourceVersion="4.3" creationDate="2018-05-01 08:35:07 -0700" startDate="2018-05-01 07:50:51 -0700" endDate="2018-05-01 08:35:03 -0700">
//<MetadataEntry key="HKTimeZone" value="America/Los_Angeles"/>
//<MetadataEntry key="HKWeatherTemperature" value="49 degF"/>
//<MetadataEntry key="HKWeatherHumidity" value="82 %"/>
//<WorkoutRoute sourceName="Watch" sourceVersion="11.3" creationDate="2018-05-01 08:58:53 -0700" startDate="2018-05-01 07:51:11 -0700" endDate="2018-05-01 08:34:52 -0700">
// <MetadataEntry key="HKMetadataKeySyncVersion" value="2"/>
// <MetadataEntry key="HKMetadataKeySyncIdentifier" value="F2BEA6D4-4E7E-4867-AAF4-05586B2F753D"/>
// <Location date="2018-05-01 07:51:11 -0700" latitude="37.7514" longitude="-122.493" altitude="74.0396" horizontalAccuracy="2.43753" verticalAccuracy="1.71176" course="28.125" speed="1.56585"/>

gpsPoint[] gpsPoints;

PImage backgroundMap;

float mapScreenWidth,mapScreenHeight;  // Dimension of map in pixels.

XML xml;

void setup() {
  size(400, 386); // 7x7
  //background(255);
  backgroundMap   = loadImage("img/7x7.png");
  mapScreenWidth  = width;
  mapScreenHeight = height;
  image(backgroundMap,0,0,mapScreenWidth,mapScreenHeight);
  smooth();

  xml = loadXML("data/bikeRides.xml");
  XML[] workoutRoutes = xml.getChildren("Workout/WorkoutRoute");

  println("num of workouts " + workoutRoutes.length);

  // Parse inside Workouts, workout O
  for (int i = 0; i < workoutRoutes.length; i++) {
    //int workoutNumber = i+1;
    //println("Workout # " + workoutNumber + " //////" );

    //workout #1, list Locations, workout 0, Locations in there, go into an Array, get OVERWRITTEN every time?  empty Location array everyime
    XML[] locations = null;
    locations = workoutRoutes[i].getChildren("Location");
    println("number of locations in workout: " + locations.length);

    //initialize object with number in array, which is number of locations
    gpsPoints = new gpsPoint[locations.length];

    //add xvalue and yvalue into object
    for (int a = 0; a < locations.length; a++){

      //get lat and long
      float pointLat = locations[a].getFloat("latitude");
      float pointLong = locations[a].getFloat("longitude");

      // convert and remap Lat and Long based on range
      // -122.5367,37.6659,-122.3383,37.8174
      float mainx = map(pointLat, 37.6659, 37.8174, 0, width); 
      float mainy = map(pointLong, -122.5367, -122.3383, 0, height); 

      gpsPoints[a] = new gpsPoint(mainx, mainy);
      gpsPoints[a].display();

    }
  }
}

void draw() {  
}

class gpsPoint {

  float prevX;
  float prevY;
  float newX;
  float newY;

  gpsPoint(float previousX, float previousY){
    prevX = previousX;
    prevY = previousY;
  }

  void display() {
    stroke(0, 50);
    point(prevX, prevY);
  }
}
...