Nette Database & PostGIS – načtení souřadnic ze sloupce typu GEOGRAPHY(POINT,4326)

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Barvoj
Člen | 60
+
0
-

Ahoj,

potřeboval bych poradit. :) Na projektu používáme PostGIS a já si nejsem jistý jak v aplikaci pracovat se sloupcem typu GEOGRAPHY(POINT,4326).

Mám následující (zjednodušenou) tabulku:

CREATE TABLE location (
	id INTEGER PRIMARY KEY NOT NULL,
	name TEXT NOT NULL,
	geo GEOGRAPHY(POINT,4326) NOT NULL
);

A z aplikace k ní přistupuji přes repository:

use Nette\Database\Context;

class LocationRepository
{
	private $database;

	public function __construct(Context $database)
    {
		$this->database = $database;
	}

	public function get($id)
	{
		return $this->database->table('location')
			->select('id, name, ST_X(geo::geometry) AS x, ST_Y(geo::geometry) AS y')
			->where(['id' => $id])
			->fetch();
	}
}

Co mě trápí je, že musím explicitně uvádět ST_X(geo::geometry) AS x, ST_Y(geo::geometry) AS y, jinak bych z databáze získal ve sloupci geo pouze nějaký nesmyslný textový řetězec.

Co mě trápí ještě víc je, že pokud mám například entitu house, která se na location odkazuje přes cizí klíč:

CREATE TABLE house (
	id INTEGER PRIMARY KEY NOT NULL,
	location_id INTEGER NOT NULL,
	FOREIGN KEY (location_id) REFERENCES location (id)

a já získám house, tak se nemohu jednoduše odkázat na location->geo:

$house = $this->database->table('house')->get(1);
$geo = $house->location->geo; // toto vraci nesmyslný textový řetězec

Zajímalo by mě tedy, jestli lze pomocí nette database načítat souřadnice bodu nějak lépe – ideálně aby fungoval zápis $house->location->geo (nebo něco podobného)?