Jacek Kowalski
2019-06-10 6b6842c72b28c1346ef501bc656ec3016d00e1c7
lib/mapper.php
@@ -9,6 +9,8 @@
   private $ttssTrips = [];
   private $gtfsrtDate = NULL;
   private $gtfsrtTrips = [];
   private $gtfsTrips = [];
   private $gtfsRoutes = [];
   private $logger = NULL;
   
   private $specialNames = [
@@ -42,8 +44,11 @@
               continue;
            }
         }
         $name = explode(' ', $vehicle->name, 2);
         $this->ttssTrips[(int)$vehicle->tripId] = [
            'id' => $vehicle->id,
            'line' => $name[0],
            'direction' => $name[1],
            'latitude' => (float)$vehicle->latitude / 3600000.0,
            'longitude' => (float)$vehicle->longitude / 3600000.0,
         ];
@@ -53,6 +58,29 @@
   
   public function getTTSSDate() {
      return $this->ttssDate / 1000.0;
   }
   public function loadGTFS($file) {
      $buffer_size = 512;
      $routes = fopen('phar://'.$file.'/routes.txt', 'r');
      $route_header = fgetcsv($routes, $buffer_size);
      while(($route = fgetcsv($routes, $buffer_size)) !== FALSE) {
         $this->gtfsRoutes[$route[0]] = $route[2];
      }
      fclose($routes);
      $trips = fopen('phar://'.$file.'/trips.txt', 'r');
      $trip_header = fgetcsv($trips, $buffer_size);
      var_dump($trip_header);
      while(($trip = fgetcsv($trips, $buffer_size)) !== FALSE) {
         $this->gtfsTrips[$trip[0]] = [
            'line' => $this->gtfsRoutes[$trip[1]] ?? NULL,
            'route' => $trip[1],
            'direction' => $trip[3],
         ];
      }
      fclose($trips);
   }
   
   public function loadGTFSRT($file) {
@@ -81,6 +109,28 @@
      return $this->gtfsrtDate;
   }
   
   public function mapUsingCoords() {
      $level = 0.002;
      foreach($this->gtfsrtTrips as $gkey => $gtrip) {
         $trip = $this->gtfsTrips[$gtrip['tripId']] ?? NULL;
         if($trip === NULL) continue;
         foreach($this->ttssTrips as $jkey => $jtrip) {
            echo $gtrip['latitude'].' '.$jtrip['latitude']."\n";
            echo $gtrip['longitude'].' '.$jtrip['longitude']."\n";
            echo $jtrip['line'].' '.$trip['line']."\n";
            echo "\n";
            if($jtrip['line'] != $trip['line']) continue;
            if(abs($gtrip['latitude'] - $jtrip['latitude']) > $level) continue;
            if(abs($gtrip['longitude'] - $jtrip['longitude']) < $level) continue;
            echo 'MATCH '.$gtrip['num'].' '.$gkey.' '.$jkey.' ('.($jkey-$gkey).')'."\n";
         }
      }
   }
   public function findOffset() {
      if(count($this->ttssTrips) == 0 || count($this->gtfsrtTrips) == 0) {
         return NULL;