EWKB.class.php in geoPHP 7
File
geoPHP/lib/adapters/EWKB.class.php
View source
<?php
class EWKB extends WKB {
public function read($wkb, $is_hex_string = FALSE) {
if ($is_hex_string) {
$wkb = pack('H*', $wkb);
}
$mem = fopen('php://memory', 'r+');
fwrite($mem, $wkb);
fseek($mem, 0);
$base_info = unpack("corder/ctype/cz/cm/cs", fread($mem, 5));
if ($base_info['s']) {
$srid = current(unpack("Lsrid", fread($mem, 4)));
}
else {
$srid = NULL;
}
fclose($mem);
$wkb_reader = new WKB();
$geom = $wkb_reader
->read($wkb);
if ($srid) {
$geom
->setSRID($srid);
}
return $geom;
}
public function write(Geometry $geometry, $write_as_hex = FALSE) {
$wkb = pack('c', 1);
switch ($geometry
->getGeomType()) {
case 'Point':
$wkb .= pack('L', 1);
$wkb .= $this
->writePoint($geometry);
break;
case 'LineString':
$wkb .= pack('L', 2);
$wkb .= $this
->writeLineString($geometry);
break;
case 'Polygon':
$wkb .= pack('L', 3);
$wkb .= $this
->writePolygon($geometry);
break;
case 'MultiPoint':
$wkb .= pack('L', 4);
$wkb .= $this
->writeMulti($geometry);
break;
case 'MultiLineString':
$wkb .= pack('L', 5);
$wkb .= $this
->writeMulti($geometry);
break;
case 'MultiPolygon':
$wkb .= pack('L', 6);
$wkb .= $this
->writeMulti($geometry);
break;
case 'GeometryCollection':
$wkb .= pack('L', 7);
$wkb .= $this
->writeMulti($geometry);
break;
}
if ($write_as_hex) {
$unpacked = unpack('H*', $wkb);
return $unpacked[1];
}
else {
return $wkb;
}
}
}
Classes
Name |
Description |
EWKB |
EWKB (Extended Well Known Binary) Adapter |