예제 #1
0
파일: WKBReader.php 프로젝트: brick/geo
 /**
  * {@inheritdoc}
  */
 protected function readGeometryHeader(WKBBuffer $buffer, &$geometryType, &$hasZ, &$hasM, &$srid)
 {
     $wkbType = $buffer->readUnsignedLong();
     $geometryType = $wkbType % 1000;
     $dimension = ($wkbType - $geometryType) / 1000;
     if ($dimension < 0 || $dimension > 3) {
         throw GeometryIOException::unsupportedWKBType($wkbType);
     }
     $hasZ = $dimension === 1 || $dimension === 3;
     $hasM = $dimension === 2 || $dimension === 3;
 }
예제 #2
0
파일: EWKBReader.php 프로젝트: brick/geo
 /**
  * {@inheritdoc}
  */
 protected function readGeometryHeader(WKBBuffer $buffer, &$geometryType, &$hasZ, &$hasM, &$srid)
 {
     $header = $buffer->readUnsignedLong();
     if ($header >= 0 && $header < 4000) {
         $geometryType = $header % 1000;
         $dimension = ($header - $geometryType) / 1000;
         if ($dimension < 0 || $dimension > 3) {
             throw GeometryIOException::unsupportedWKBType($header);
         }
         $hasZ = $dimension === 1 || $dimension === 3;
         $hasM = $dimension === 2 || $dimension === 3;
     } else {
         $geometryType = $header & 0xfff;
         $hasZ = ($header & EWKBTools::Z) !== 0;
         $hasM = ($header & EWKBTools::M) !== 0;
         $hasSRID = ($header & EWKBTools::S) !== 0;
         if ($hasSRID) {
             $srid = $buffer->readUnsignedLong();
         }
     }
 }