Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}