/** * Serialize geometries into an EWKB binary string. * * @param Geometry $geometry * * @return string The Extended-WKB binary string representation of the input geometries */ public function write(Geometry $geometry, $write_as_hex = FALSE) { // We always write into NDR (little endian) $wkb = pack('c', 1); switch ($geometry->getGeomType()) { case 'Point': $wkb .= $this->writeType($geometry, 1); $wkb .= $this->writeSRID($geometry); $wkb .= $this->writePoint($geometry); break; case 'LineString': $wkb .= $this->writeType($geometry, 2); $wkb .= $this->writeSRID($geometry); $wkb .= $this->writeLineString($geometry); break; case 'Polygon': $wkb .= $this->writeType($geometry, 3); $wkb .= $this->writeSRID($geometry); $wkb .= $this->writePolygon($geometry); break; case 'MultiPoint': $wkb .= $this->writeType($geometry, 4); $wkb .= $this->writeSRID($geometry); $wkb .= $this->writeMulti($geometry); break; case 'MultiLineString': $wkb .= $this->writeType($geometry, 5); $wkb .= $this->writeSRID($geometry); $wkb .= $this->writeMulti($geometry); break; case 'MultiPolygon': $wkb .= $this->writeType($geometry, 6); $wkb .= $this->writeSRID($geometry); $wkb .= $this->writeMulti($geometry); break; case 'GeometryCollection': $wkb .= $this->writeType($geometry, 7); $wkb .= $this->writeSRID($geometry); $wkb .= $this->writeMulti($geometry); break; } if ($write_as_hex) { $unpacked = unpack('H*', $wkb); return $unpacked[1]; } else { return $wkb; } }