File: ShapeFile.class.php

package info (click to toggle)
phpmyadmin 4%3A4.2.12-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 33,240 kB
  • sloc: php: 133,253; sql: 510; sh: 240; makefile: 192; python: 187
file content (102 lines) | stat: -rw-r--r-- 2,857 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
 * This class extends ShapeFile class to cater the following phpMyAdmin
 * specific requirements.
 *
 * @package    PhpMyAdmin-Import
 * @subpackage ESRI_Shape
 */
if (! defined('PHPMYADMIN')) {
    exit;
}

/**
 * 1) To load data from .dbf file only when the dBase extension is available.
 * 2) To use PMA_importGetNextChunk() functionality to read data, rather than
 *    reading directly from a file. Using ImportShp::readFromBuffer() in place
 *    of fread(). This makes it possible to use compressions.
 *
 * @package    PhpMyAdmin-Import
 * @subpackage ESRI_Shape
 */
class PMA_ShapeFile extends ShapeFile
{
    /**
     * Returns whether the 'dbase' extension is loaded
     *
     * @return boolean whether the 'dbase' extension is loaded
     */
    function _isDbaseLoaded()
    {
        return extension_loaded('dbase');
    }

    /**
     * Loads ESRI shape data from the imported file
     *
     * @param string $FileName not used, it's here only to match the method
     *                         signature of the method being overidden
     *
     * @return void
     * @see ShapeFile::loadFromFile()
     */
    function loadFromFile($FileName)
    {
        $this->_loadHeaders();
        $this->_loadRecords();
        if ($this->_isDbaseLoaded()) {
            $this->_closeDBFFile();
        }
    }

    /**
     * Loads metadata from the ESRI shape file header
     *
     * @return void
     * @see ShapeFile::_loadHeaders()
     */
    function _loadHeaders()
    {
        ImportShp::readFromBuffer(24);
        $this->fileLength = loadData("N", ImportShp::readFromBuffer(4));

        ImportShp::readFromBuffer(4);
        $this->shapeType = loadData("V", ImportShp::readFromBuffer(4));

        $this->boundingBox = array();
        $this->boundingBox["xmin"] = loadData("d", ImportShp::readFromBuffer(8));
        $this->boundingBox["ymin"] = loadData("d", ImportShp::readFromBuffer(8));
        $this->boundingBox["xmax"] = loadData("d", ImportShp::readFromBuffer(8));
        $this->boundingBox["ymax"] = loadData("d", ImportShp::readFromBuffer(8));

        if ($this->_isDbaseLoaded() && $this->_openDBFFile()) {
            $this->DBFHeader = $this->_loadDBFHeader();
        }
    }

    /**
     * Loads geometry data from the ESRI shape file
     *
     * @return boolean|void
     * @see ShapeFile::_loadRecords()
     */
    function _loadRecords()
    {
        global $eof;
        ImportShp::readFromBuffer(32);
        while (true) {
            $record = new PMA_ShapeRecord(-1);
            $record->loadFromFile($this->SHPFile, $this->DBFFile);
            if ($record->lastError != "") {
                return false;
            }
            if ($eof) {
                break;
            }

            $this->records[] = $record;
        }
    }
}
?>