Diskuse:155UZPD / Semestrální projekt: Porovnání verzí

Z GeoWikiCZ
Přejít na: navigace, hledání
m
m
 
Řádek 16: Řádek 16:
  
 
== Vstupní data ==
 
== Vstupní data ==
 
Databáze obsahuje ve schématu '''osm''' data [[OpenStreetMap]] ČR.
 
  
 
<source lang=sql>
 
<source lang=sql>
SELECT f_table_name, f_geometry_column, srid, type FROM geometry_columns WHERE f_table_schema = 'osm';
+
SELECT * FROM geometry_columns;
 
</source>
 
</source>
 
<pre>
 
f_table_name  | f_geometry_column |  srid  |    type   
 
---------------+-------------------+--------+------------
 
czech_roads  | geom              | 900913 | LINESTRING
 
czech_point  | geom              | 900913 | POINT
 
czech_line    | geom              | 900913 | LINESTRING
 
czech_polygon | geom              | 900913 | POLYGON
 
(4 rows)
 
</pre>
 
 
<source lang=sql>
 
SELECT f_table_name, f_geometry_column, srid, TYPE FROM geometry_columns WHERE f_table_schema = 'ruian';
 
</source>
 
 
<pre>
 
    f_table_name    | f_geometry_column | srid |    type   
 
--------------------+-------------------+------+--------------
 
castiobci          | geom              | 5514 | POINT
 
obce              | geom              | 5514 | MULTIPOLYGON
 
katastralniuzemi  | geom              | 5514 | MULTIPOLYGON
 
kraje              | geom              | 5514 | MULTIPOLYGON
 
okresy            | geom              | 5514 | MULTIPOLYGON
 
momc              | geom              | 5514 | POINT
 
regionysoudrznosti | geom              | 5514 | MULTIPOLYGON
 
mop                | geom              | 5514 | POINT
 
vusc              | geom              | 5514 | MULTIPOLYGON
 
orp                | geom              | 5514 | MULTIPOLYGON
 
spravniobvody      | geom              | 5514 | POINT
 
pou                | geom              | 5514 | MULTIPOLYGON
 
staty              | geom              | 5514 | MULTIPOLYGON
 
zsj                | geom              | 5514 | MULTIPOINT
 
(14 rows)
 
</pre>
 
 
<source lang=sql>
 
SELECT f_table_name, f_geometry_column, srid, TYPE FROM geometry_columns WHERE f_table_schema = 'ruian_praha';
 
</source>
 
 
<pre>
 
  f_table_name  | f_geometry_column | srid |      type     
 
------------------+-------------------+------+-----------------
 
adresnimista    | geom              | 5514 | POINT
 
castiobci        | geom              | 5514 | POINT
 
stavebniobjekty  | geom              | 5514 | MULTIPOLYGON
 
katastralniuzemi | geom              | 5514 | MULTIPOLYGON
 
momc            | geom              | 5514 | MULTIPOLYGON
 
ulice            | geom              | 5514 | MULTILINESTRING
 
mop              | geom              | 5514 | MULTIPOLYGON
 
obce            | geom              | 5514 | MULTIPOLYGON
 
zsj              | geom              | 5514 | MULTIPOLYGON
 
parcely          | geom              | 5514 | POLYGON
 
spravniobvody    | geom              | 5514 | MULTIPOLYGON
 
(11 rows)
 
</pre>
 
  
 
== Transformace dat ==
 
== Transformace dat ==

Aktuální verze z 9. 12. 2018, 18:11

Přístup k databázi pgis_uzpd

  • host: geo102.fsv.cvut.cz
  • uživatelské jméno: uzpd<rok>_<skupina>, např. uzpd17_a

Příklad pro skupinu A v akademickém roce 2017/2018

psql pgis_uzpd -U uzpd17_a -h geo102.fsv.cvut.cz -W
Přihlašovací dialog v programu QGIS


Vstupní data

SELECT * FROM geometry_columns;

Transformace dat

Data ze schémat osm a gis1 jsou lokalizována v různých souřadnicových systémech.

SELECT g.f_table_name, s.auth_name, s.auth_srid, s.proj4text FROM geometry_columns AS g JOIN
 spatial_ref_sys AS s ON g.srid = s.srid AND g.f_table_schema = 'osm';
-[ RECORD 1 ]+--------------------------------------------------------------------------------------------------------------------------
f_table_name | czech_line
auth_name    | EPSG
auth_srid    | 3857
proj4text    | +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext  +no_defs
...
SELECT g.f_table_name, s.auth_name, s.auth_srid, s.proj4text FROM geometry_columns AS g JOIN
 spatial_ref_sys AS s ON g.srid = s.srid AND g.f_table_schema = 'ruian';
-[ RECORD 1 ]+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
f_table_name | castiobci
auth_name    | EPSG
auth_srid    | 5514
proj4text    | +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=570.8,85.7,462.8,4.998,1.587,5.261,3.56 +units=m +no_defs 
...

Při kombinaci dat ze schémat osm a ruian je nutné provést transformaci (ST_Transform) dat do společného souřadnicové systému.

SELECT count(*) from osm.czech_point AS kino JOIN ruian.obce AS obce ON
 ST_Within(kino.geom, ST_Transform(obce.geom, 3857)) AND
 kino.amenity = 'cinema' AND obce.nazev = 'Praha';

Při opakované transformaci je výhodné vytvořit ve vlastním schématu kopii vektorové vrstvy ve zvoleném souřadnicovém systému, např.

CREATE TABLE obce AS SELECT * FROM ruian.obce;

ALTER TABLE obce ADD COLUMN geom1 geometry(multipolygon, 3857);

UPDATE obce SET geom1 = ST_Transform(geom, 3857);
SELECT nazev,st_astext(st_pointonsurface(geom)) as jtsk,st_astext(st_pointonsurface(geom1)) as pmercator FROM obce LIMIT 1;
-[ RECORD 1 ]---------------------------------------
nazev     | Tvorovice
jtsk      | POINT(-551931.998228383 -1145211.62)
pmercator | POINT(1916798.04173232 6339076.60345749)

Korespondující dotaz dostane následující podobu

SELECT COUNT(*) FROM osm.czech_point AS kino JOIN obce AS obce ON
 ST_Within(kino.geom, obce.geom1) AND
 kino.amenity = 'cinema' AND obce.nazev = 'Praha';

Vytvoření tématické vrstvy

Příklad pro 'vinice' (polygonová data) - viz Map Features na wiki OSM.

CREATE TABLE vinice AS SELECT osm_id, geom AS geom FROM czech_polygon WHERE landuse = 'vineyard';
  • Definice primárního klíče
ALTER TABLE vinice ADD PRIMARY KEY(osm_id);

Pokud přidání primárního klíče nad atributem osm_id zkolabuje, přidejte nový atribut gid a vytvořte primární klíč nad tímto atributem

ALTER TABLE vinice ADD COLUMN gid serial;
ALTER TABLE vinice ADD PRIMARY KEY(gid);
  • Vytvoření prostorového klíče
CREATE INDEX ON vinice USING gist (geom);

Odstranění tématické vrstvy

DROP TABLE vinice;