function readRecordPolyLine(&$fp) { $data = readBoundingBox($fp); $data["numparts"] = readAndUnpack("i", fread($fp, 4)); $data["numpoints"] = readAndUnpack("i", fread($fp, 4)); _d("PolyLine numparts = " . $data["numparts"] . " numpoints = " . $data["numpoints"]); for ($i = 0; $i < $data["numparts"]; $i++) { $data["parts"][$i] = 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"] && !feof($fp)) { set_time_limit(160); $data["parts"][$part_index]["points"][] = readRecordPoint($fp, true); $points_read++; } } _d("Returning shp_data parts array = " . getArray($data['parts'])); 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; }
function readRecordPolyLine(&$fp, $options = null) { $data = readBoundingBox($fp); $data["numparts"] = readAndUnpack("i", fread($fp, 4)); $data["numpoints"] = readAndUnpack("i", fread($fp, 4)); //_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] = 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"] && !feof($fp)) { $data["parts"][$part_index]["points"][] = readRecordPoint($fp, true); $points_read++; } } } 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; }