Geographische Referenzsysteme (spatial reference systems)
Merkmal | Geometry-Typ | Geography-Typ |
---|---|---|
Modell der Erde | Planar (flach), kartesische Ebene | Sphärisch (rund), geodätisches Modell |
Koordinaten | Kann beliebige Koordinatensysteme verwenden (planar oder sphärisch) | Fast ausschließlich für sphärische Koordinatensysteme |
Einheiten | Hängen vom Koordinatensystem (SRID) ab. Grad oder Meter. Grad sind für Distanzen nutzlos | Immer Meter, für Distanzen ok |
Genauigkeit | Sehr genau für kleine Gebiete (z.B. eine Stadt), bei denen die Erdkrümmung vernachlässigbar ist. Ungenau für große Distanzen | Sehr genau für große, globale Distanzen, da die Erdkrümmung berücksichtigt wird |
Performance | Schneller, da die Berechnungen mathematisch einfacher sind (Pythagoras statt komplexer sphärischer Trigonometrie) | Langsamer, da die Berechnungen auf dem Sphäroid viel komplexer sind |
Funktionsumfang | Fast alle Funktionen für Geometry-Typ verfügbar | Kleinerer Funktionsumfang als Geometry-Typ |
Code | Ergebnis |
---|---|
Geometry
|
4,76 Ergebnis ist in Grad und daher nutzlos |
Geography
|
505162 Ergebnis ist in Meter und daher sinnvoll |
Geometry
|
505178 Ergebnis ist in Meter und daher sinnvoll. Ungenauer: 16m Differenz, da Transformation in planares System (31468) |
Tabelle | Inhalt | Geometrien | Anzahl Datensätze |
---|---|---|---|
bln_edges |
Segmente aller Straßen in Berlin | Linestring | 920966 |
bln_bezirk_museum |
Bezirke und Museen in Berlin | Polygone und Points | 128 |
In der Abfrage wird ein Geo-Join durchgeführt
select count(*)
from bln_edges be
join bln_bezirk_museum bm on st_intersects(be.geometry, bm.shape)
where bm.name='Pankow'
Dauer ohne Index in Sekunden | Dauer mit Index in Sekunden | Faktor |
---|---|---|
5 | 0.170 | 29 |
create index idx_bln_edges_geometry on ugeobln.bln_edges using gist (geometry)
select count(*)
from bln_edges be
join bln_bezirk_museum bm on be.geometry && bm.shape
where bm.name='Pankow'
Dauert nur 0.055 Sekunden, liefert aber ungenaue Ergebnisse, da kein Verfeinerungsschritt
select name, geometry, st_centroid(geometry) as center
from gis_osm_pois_a_free_1
where osm_id ='41361350';
select ST_MakeEnvelope(13.5233,52.4572,13.5322,52.4602, 4326);
select null, null, null, null,
ST_MakeEnvelope(13.5233,52.4572,13.5322,52.4602, 4326)
union all
select *
from gis_osm_pois_a_free_1
where st_intersects(ST_MakeEnvelope(13.5233,52.4572,13.5322,52.4602, 4326), geometry);
select name, shape from bezirk
union all
select 'bb' as name, ST_Extent(shape) as shape from bezirk;
select *
from gis_osm_buildings_a_free_1 b
order by b.geometry <-> st_point(13.5270, 52.4585, 4326)
limit 300;
select pos from haltestelle
union all
select ST_VoronoiPolygons(st_collect(pos)) as shape from haltestelle h;
with
pi as (
select *
from gis_osm_places_a_free_1
where name = 'Pfaueninsel'
)
select b.geometry
from gis_osm_buildings_a_free_1 b join pi on st_contains(pi.geometry, b.geometry)
union all
select pi.geometry from pi;
with
pi as (
select geometry
from gis_osm_places_a_free_1
where name = 'Pfaueninsel'
),
d as (
select
round(min(st_area(pi.geometry::geography))) as flaeche_insel,
round(sum(st_area(b.geometry::geography))) as flaeche_gebaeude
from gis_osm_buildings_a_free_1 b join pi on st_contains(pi.geometry, b.geometry)
)
select *, d.flaeche_insel-d.flaeche_gebaeude as diff from d;