Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 50 additions & 3 deletions src/Geometry.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
use Brick\Geo\IO\GeoJSONReader;
use Brick\Geo\IO\GeoJSONWriter;
use Brick\Geo\IO\WKBReader;
use Brick\Geo\IO\WKBWriter;
use Brick\Geo\IO\WKTWriter;
use InvalidArgumentException;

Expand All @@ -24,6 +25,11 @@ class Geometry implements \JsonSerializable
*/
protected BrickGeometry $geometry;

/**
* Serialization format.
*/
protected static ?string $serializeAs;

/**
* Create a geometry wrapper.
*
Expand Down Expand Up @@ -96,11 +102,30 @@ public function getGeometry(): BrickGeometry
/**
* Serialize the geometry object.
*
* @return \stdClass The serialized geometry.
* @return mixed The serialized geometry.
*/
public function jsonSerialize(): \stdClass
public function jsonSerialize()
{
return (new GeoJSONWriter())->writeRaw($this->geometry);
switch (static::$serializeAs) {
case 'wkb':
return (new WKBWriter())->write($this->geometry);

case 'wkt':
$locale = setlocale(LC_NUMERIC, 0);
setlocale(LC_NUMERIC, 'C');
try {
$writer = new WKTWriter();
$writer->setPrettyPrint(false);

return $writer->write($this->geometry);
} finally {
setlocale(LC_NUMERIC, $locale);
}

case 'geojson':
default:
return (new GeoJSONWriter())->writeRaw($this->geometry);
}
}

/**
Expand All @@ -125,4 +150,26 @@ public function __clone()
{
$this->geometry = clone $this->geometry;
}

/**
* Set the serialization format.
* Supported formats are: wkb, wkt, geojson.
*
* @param string $serializeAs The serialization format.
* @return void
*/
public static function setSerializeAs(string $serializeAs): void
{
switch ($serializeAs) {
case 'wkb':
case 'wkt':
case 'geojson':
static::$serializeAs = $serializeAs;

return;

default:
throw new InvalidArgumentException(sprintf('Invalid serialization format: %s', $serializeAs));
}
}
}