type || null === $a->coordinates) { throw PointException::badJsonString($geojson); } if ('Point' !== $a->type) { throw PointException::badGeoType(); } [$lon, $lat] = $a->coordinates; return Point::fromLonLat($lon, $lat); } public static function fromLonLat(float $lon, float $lat): self { if ((-180 < $lon && 180 > $lon) && (-90 < $lat && 90 > $lat)) { return new Point($lon, $lat); } throw PointException::badCoordinates($lon, $lat); } public function getLat(): float { return $this->lat; } public function getLon(): float { return $this->lon; } public function jsonSerialize(): array { return $this->toArrayGeoJson(); } public function toArrayGeoJson(): array { return [ 'type' => 'Point', 'coordinates' => [$this->lon, $this->lat], ]; } public function toGeoJson(): string { $array = $this->toArrayGeoJson(); return \json_encode($array, JSON_THROW_ON_ERROR); } public function toWKT(): string { return sprintf('SRID=%s;POINT(%s %s)', self::$SRID, $this->lon, $this->lat); } }