コード例 #1
0
ファイル: ShapeFileRecord.php プロジェクト: edewaele/yapafo
 static function readRecordMultiPointZ(&$fp, $options = null)
 {
     $data = ShapeFile::readBoundingBox($fp);
     $data["numparts"] = ShapeFile::readAndUnpack("i", fread($fp, 4));
     $data["numpoints"] = ShapeFile::readAndUnpack("i", fread($fp, 4));
     // 	$fileX = 40 + (16*$data["numpoints"]);
     // 	$fileY = $fileX + 16 + (8*$data["numpoints"]);
     $fileX = 44 + 4 * $data["numparts"];
     $fileY = $fileX + 16 * $data["numpoints"];
     $fileZ = $fileY + 16 + 8 * $data["numpoints"];
     /*
      Note: X = 44 + (4 * NumParts), Y = X + (16 * NumPoints), Z = Y + 16 + (8 * NumPoints)
     */
     //_d("PolyLine numparts = ".$data["numparts"]." numpoints = ".$data["numpoints"]);
     if (isset($options['noparts']) && $options['noparts'] == true) {
         //Skip the parts
         $points_initial_index = ftell($fp) + 4 * $data["numparts"];
         $points_read = $data["numpoints"];
     } else {
         for ($i = 0; $i < $data["numparts"]; $i++) {
             $data["parts"][$i] = ShapeFile::readAndUnpack("i", fread($fp, 4));
             //_d("PolyLine adding point index= ".$data["parts"][$i]);
         }
         $points_initial_index = ftell($fp);
         //_d("Reading points; initial index = $points_initial_index");
         $points_read = 0;
         foreach ($data["parts"] as $part_index => $point_index) {
             //fseek($fp, $points_initial_index + $point_index);
             //_d("Seeking initial index point [".($points_initial_index + $point_index)."]");
             if (!isset($data["parts"][$part_index]["points"]) || !is_array($data["parts"][$part_index]["points"])) {
                 $data["parts"][$part_index] = array();
                 $data["parts"][$part_index]["points"] = array();
             }
             while (!in_array($points_read, $data["parts"]) && $points_read < $data["numpoints"]) {
                 $data["parts"][$part_index]["points"][] = self::readRecordPoint($fp, true);
                 $points_read++;
             }
         }
         $data['Zmin'] = ShapeFile::readAndUnpack("d", fread($fp, 8));
         $data['Zmax'] = ShapeFile::readAndUnpack("d", fread($fp, 8));
         foreach ($data["parts"] as $part_index => $point_index) {
             foreach ($point_index["points"] as $n => $p) {
                 $data["parts"][$part_index]['points'][$n] = self::readRecordPointZSP($p, $fp, true);
             }
         }
         $data['Mmin'] = ShapeFile::readAndUnpack("d", fread($fp, 8));
         $data['Mmax'] = ShapeFile::readAndUnpack("d", fread($fp, 8));
         foreach ($data["parts"] as $part_index => $point_index) {
             foreach ($point_index["points"] as $n => $p) {
                 $data["parts"][$part_index]['points'][$n] = self::readRecordPointMSP($p, $fp, true);
             }
         }
     }
     fseek($fp, $points_initial_index + $points_read * XY_POINT_RECORD_LENGTH);
     //_d("Seeking end of points section [".($points_initial_index + ($points_read * XY_POINT_RECORD_LENGTH))."]");
     return $data;
 }