Integrace s QGIS: Porovnání verzí
(Založena nová stránka: =Nastavení projektu QGIS pro mix S-JTSK a WGS84 vrstev= Mapy CUZK jsou primárně v souřadnicovém systému S-JTSK (Greenwich) / Krovak, EPSG:102067 A tak tomu bude ješt...) |
|||
(Není zobrazeno 5 mezilehlých verzí od jednoho dalšího uživatele.) | |||
Řádek 1: | Řádek 1: | ||
+ | [[en:QGIS integration]] | ||
=Nastavení projektu QGIS pro mix S-JTSK a WGS84 vrstev= | =Nastavení projektu QGIS pro mix S-JTSK a WGS84 vrstev= | ||
Mapy CUZK jsou primárně v souřadnicovém systému S-JTSK (Greenwich) / Krovak, EPSG:102067 | Mapy CUZK jsou primárně v souřadnicovém systému S-JTSK (Greenwich) / Krovak, EPSG:102067 | ||
Řádek 7: | Řádek 8: | ||
V současné době defaultní implementace transformace mezi WGS84 do S-JTSK obsahuje chybu až 120m, takže je nepoužitelná. | V současné době defaultní implementace transformace mezi WGS84 do S-JTSK obsahuje chybu až 120m, takže je nepoužitelná. | ||
− | Pro použitelnou přesnost musíte do nastavení SRS v projektu QGISu přidat | + | Pro použitelnou přesnost musíte do nastavení SRS v projektu QGISu k defaultní definici S-JTSK (Greenwich) přidat řetězec "+towgs84=570.83789,85.682641,462.84673,4.9984501,1.5867074,5.2611106,3.5610256". |
+ | |||
+ | Abyste to nemuseli dělat v každém projektu, v menu "Editovat-Uživatelský SRS" si přidejte nový SRS s touto definicí: | ||
+ | |||
+ | +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=greenwich +units=m +no_defs +towgs84=570.83789,85.682641,462.84673,4.9984501,1.5867074,5.2611106,3.5610256 | ||
+ | |||
+ | =Napojení na MySQL= | ||
+ | |||
+ | CREATE TABLE IF NOT EXISTS `geometry_columns` ( | ||
+ | `f_table_catalog` varchar(256) COLLATE utf8_czech_ci NOT NULL, | ||
+ | `f_table_schema` varchar(256) COLLATE utf8_czech_ci NOT NULL, | ||
+ | `f_table_name` varchar(256) COLLATE utf8_czech_ci NOT NULL, | ||
+ | `f_geometry_column` varchar(256) COLLATE utf8_czech_ci NOT NULL, | ||
+ | `coord_dimension` int(11) NOT NULL, | ||
+ | `srid` int(11) NOT NULL, | ||
+ | `type` varchar(30) COLLATE utf8_czech_ci NOT NULL | ||
+ | ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci; | ||
+ | |||
+ | |||
+ | INSERT INTO `geometry_columns` (`f_table_catalog`, `f_table_schema`, `f_table_name`, `f_geometry_column`, `coord_dimension`, `srid`, `type`) VALUES | ||
+ | ('', '', 'uzly', 'the_geom', 2, 4326, 'POINT'), | ||
+ | ('', '', 'spoje', 'geom', 2, 4326, 'LINESTRING'), | ||
+ | ('', '', 'qgis_uzly', 'geom', 2, 4326, 'POINT'), | ||
+ | ('', '', 'qgis_spoje', 'geom', 2, 4326, 'LINESTRING'), | ||
+ | ('', '', 'qgis_spoje_10GHz', 'geom', 2, 4326, 'LINESTRING'), | ||
+ | ('', '', 'towns', 'geom', 2, 4326, 'POLYGON'), | ||
+ | ('', '', 'qgis_uzly_optika', 'geom', 2, 102067, 'POINT'); | ||
+ | |||
+ | CREATE TABLE IF NOT EXISTS `qgis_spoje` ( | ||
+ | `id` int(11) NOT NULL AUTO_INCREMENT, | ||
+ | `geom` geometry NOT NULL, | ||
+ | `name` varchar(255) COLLATE utf8_czech_ci NOT NULL, | ||
+ | `COMMENT` varchar(255) COLLATE utf8_czech_ci NOT NULL, | ||
+ | PRIMARY KEY (`id`) | ||
+ | ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=66 ; | ||
+ | |||
+ | =Konverze katastrálních oblastí na polygony= | ||
+ | |||
+ | Katastrální oblasti ve vektorové podobě jsou v souboru kucr.osm. | ||
+ | Bohužel to nejsou oblasti (polygony), ale jen hromada čar (linestring). | ||
+ | Pro spatial SQL dotazy typu "ve kterém katastru se nachází bod X,Y?" ale potřebujeme polygony. | ||
+ | |||
+ | Převod z linestring-ů na polygony je oříšek. | ||
+ | V QGISu jsem žádný takový plugin nenašel, naštěstí to umí PostGIS. | ||
+ | |||
+ | Vyzkoušel jsem to na uzavřeném obrazci ze 2 linestringů: | ||
+ | insert into oblasti (name, the_geom) values ('novy', (select (ST_dump(st_polygonize(kucr.the_geom))).geom from spoje)); | ||
+ | |||
+ | Nejdříve bylo potřeba znovu-nastavit SRID, které se ztratilo při konverzi z shape vrstvy do Postgisu: | ||
+ | update kucr set the_geom=setsrid(the_geom,4326); | ||
− | + | Pak již nic nebránilo udělat konverzi pro celou ČR: | |
+ | |||
+ | insert into mesta (the_geom) (select (ST_dump(st_polygonize(the_geom))).geom from kucr); | ||
+ | |||
+ | Což proběhlo kupodivu relativně rychle (pár sekund). | ||
+ | |||
+ | Pokud byste chtěli polygonizovat pouze menší oblast, lze to např. takto: | ||
+ | |||
+ | insert into mesta (the_geom) (select (ST_dump(st_polygonize(the_geom))).geom from kucr where kucr.the_geom && SetSRID('BOX3D(17.4 48.9, 17.6 49)'::box3d, 4326)); |
Aktuální verze z 21. 5. 2013, 12:47
Nastavení projektu QGIS pro mix S-JTSK a WGS84 vrstev
Mapy CUZK jsou primárně v souřadnicovém systému S-JTSK (Greenwich) / Krovak, EPSG:102067 A tak tomu bude ještě mnoho a mnoho let, protože přepočet z JTSK na WGS84 je nepřesný, tzn. konverze by nebyla beze ztrát. WMS služba CUZK umí souřadnice i mapy poskytovat i ve WGS84, ale přepočet zatěžuje server a výsledná mapa je pak zdeformovaná (nakloněná). Proto je lepší mít projekt v QGISu nastaven na systém S-JTSK a WGS84 používat pouze v těch našich vrstvách, kde je WGS84 praktičtější.
V současné době defaultní implementace transformace mezi WGS84 do S-JTSK obsahuje chybu až 120m, takže je nepoužitelná.
Pro použitelnou přesnost musíte do nastavení SRS v projektu QGISu k defaultní definici S-JTSK (Greenwich) přidat řetězec "+towgs84=570.83789,85.682641,462.84673,4.9984501,1.5867074,5.2611106,3.5610256".
Abyste to nemuseli dělat v každém projektu, v menu "Editovat-Uživatelský SRS" si přidejte nový SRS s touto definicí:
+proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=greenwich +units=m +no_defs +towgs84=570.83789,85.682641,462.84673,4.9984501,1.5867074,5.2611106,3.5610256
Napojení na MySQL
CREATE TABLE IF NOT EXISTS `geometry_columns` ( `f_table_catalog` varchar(256) COLLATE utf8_czech_ci NOT NULL, `f_table_schema` varchar(256) COLLATE utf8_czech_ci NOT NULL, `f_table_name` varchar(256) COLLATE utf8_czech_ci NOT NULL, `f_geometry_column` varchar(256) COLLATE utf8_czech_ci NOT NULL, `coord_dimension` int(11) NOT NULL, `srid` int(11) NOT NULL, `type` varchar(30) COLLATE utf8_czech_ci NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
INSERT INTO `geometry_columns` (`f_table_catalog`, `f_table_schema`, `f_table_name`, `f_geometry_column`, `coord_dimension`, `srid`, `type`) VALUES (, , 'uzly', 'the_geom', 2, 4326, 'POINT'), (, , 'spoje', 'geom', 2, 4326, 'LINESTRING'), (, , 'qgis_uzly', 'geom', 2, 4326, 'POINT'), (, , 'qgis_spoje', 'geom', 2, 4326, 'LINESTRING'), (, , 'qgis_spoje_10GHz', 'geom', 2, 4326, 'LINESTRING'), (, , 'towns', 'geom', 2, 4326, 'POLYGON'), (, , 'qgis_uzly_optika', 'geom', 2, 102067, 'POINT');
CREATE TABLE IF NOT EXISTS `qgis_spoje` ( `id` int(11) NOT NULL AUTO_INCREMENT, `geom` geometry NOT NULL, `name` varchar(255) COLLATE utf8_czech_ci NOT NULL, `COMMENT` varchar(255) COLLATE utf8_czech_ci NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=66 ;
Konverze katastrálních oblastí na polygony
Katastrální oblasti ve vektorové podobě jsou v souboru kucr.osm. Bohužel to nejsou oblasti (polygony), ale jen hromada čar (linestring). Pro spatial SQL dotazy typu "ve kterém katastru se nachází bod X,Y?" ale potřebujeme polygony.
Převod z linestring-ů na polygony je oříšek. V QGISu jsem žádný takový plugin nenašel, naštěstí to umí PostGIS.
Vyzkoušel jsem to na uzavřeném obrazci ze 2 linestringů:
insert into oblasti (name, the_geom) values ('novy', (select (ST_dump(st_polygonize(kucr.the_geom))).geom from spoje));
Nejdříve bylo potřeba znovu-nastavit SRID, které se ztratilo při konverzi z shape vrstvy do Postgisu:
update kucr set the_geom=setsrid(the_geom,4326);
Pak již nic nebránilo udělat konverzi pro celou ČR:
insert into mesta (the_geom) (select (ST_dump(st_polygonize(the_geom))).geom from kucr);
Což proběhlo kupodivu relativně rychle (pár sekund).
Pokud byste chtěli polygonizovat pouze menší oblast, lze to např. takto:
insert into mesta (the_geom) (select (ST_dump(st_polygonize(the_geom))).geom from kucr where kucr.the_geom && SetSRID('BOX3D(17.4 48.9, 17.6 49)'::box3d, 4326));