[Talk-cz] Postgis tutoriál (bylo PointInfo JOSM plugin - zobrazení informací z RUIAN)

Marián Kyral mkyral na email.cz
Neděle Únor 2 21:49:23 UTC 2014


Moc díky. Myslím, že pro začátek mi to stačí.

Marián

Dne 2.2.2014 20:23, Petr Vejsada napsal(a):
> Ahoj,
>
> Dne Ne 2. února 2014 19:28:12, Marián Kyral napsal(a):
>
> definiční čára, mně blbne na klávesnici F, fakt, nedělám si srandu...
>
> Geometry typ prostě obsahuje údaje o tvaru nějakého objektu. Zobrazení:
>
> třeba
> select st_astext(definicni_cara)
>
> Geometrie může být bod, čára, polygon, multipolygon, oblouky a též směs všeho
> uvedeného.
>
> SRID = identifikace projekce, ve kreré je geometrie vyjádřena. Používáme v OSM
> dvě - 900913 pro zobrazování a 4326, což jsou ty stupně, jak je známe z
> běžného života.
>
> RUIAN mám uložen v 900913, aby s tím Mapnik neměl tolik práce.
>
> select st_srid(definicni_cara) from ruian.rn_ulice limit 1;
>
>   st_srid
> ---------
>    900913
> (1 řádka)
>
> Když chceš najít nejbližší ulici k bodu, vyjádřenému v "občanských"
> souřadnicích, tedy 4326, je potřeba to převést do 900913, protože takto jsou
> uložena data (platí jen pro tu databázi, co mám na serveru; někdo jiný to mlže
> mít jinak).
>
> To se dělá transformací - select
> st_transform(<geometrie_v_lidských_souřadnicích>,<do jakého systému>)
>
> Bod jakožto data typu geometrie vytvoříš třeba funkcí
> st_makepoint(<lon>,<lat>). Tato funkce vrátí data typu geometry a je to point.
>
> Není však jasné, v jakém souřadnicovém systému to vlastně je. Proto použijeme
> st_setsrid(<geometry>,<srid>)
>
> Takže do PG zadáme bod třeba
>
> select st_setsrid(st_makepoint(14,50),4326)
>
>
> Lidsky čitelné totéž:
>
> select st_astext(st_setsrid(st_makepoint(14,50),4326));
>    st_astext
> --------------
>   POINT(14 50)
> (1 řádka)
>
>
> V jakém souřadnicovém systému to vlastně máme?
>
> select st_srid(st_setsrid(st_makepoint(14,50),4326));
>   st_srid
> ---------
>      4326
> (1 řádka)
>
>
> Ten samý bod si zobrazíme v lidsky čitelné formě v souřadnicovém systému
> 900913:
>
> select st_astext(st_transform(st_setsrid(st_makepoint(14,50),4326),900913));
>                  st_astext
> ------------------------------------------
>   POINT(1558472.87110583 6446275.84101716)
> (1 řádka)
>
> A konečně se dostáváme k cíli:
>
> select nazev from ruian.rn_ulice order by definicni_cara <->
> st_transform(st_setsrid(st_makepoint(14,50),4326),900913) limit 1;
>    nazev
> ----------
>   Na Zámku
> (1 řádka)
>
>
> Jak je ta ulice daleko?
>
> Funkce st_distance(geometry,geometry)
>
> Ta ráda vrací vzdálenost v radiánech na zemském povrchu, osobně dávám přednost
> metrům ;-). V metrech nám to řekne, když geometrie budou geografie. Geography
> je podobný datový typ, vyjadřuje se v souřadnicovém systému 4326.
>
> Toho se docílí přetypováním na typ geography.
>
> Celý select pak vypadá:
>
> select nazev,st_distance( (st_transform(definicni_cara,4326))::geography,
> (st_setsrid(st_makepoint(14,50),4326))::geography ) from ruian.rn_ulice order
> by definicni_cara <-> st_transform(st_setsrid(st_makepoint(14,50),4326),900913)
> limit 1;
>
>    nazev   | st_distance
> ----------+--------------
>   Na Zámku | 26.405619556
> (1 řádka)
>
> Nejbližší bod ulice Na Zámku je od nás vzdálen 26 metrů a 40 centimetrů.
>
> Cvičení:
>
> Jak si zobrazíme lidsky čitelné souřadnice adresního bodu z RUIAN?
>
> A:
> select st_astext(st_transform(definicni_bod,4326)) from ruian.rn_adresni_misto
> where kod=21411409;
>
>                  st_astext
> ------------------------------------------
>   POINT(13.6752996130858 49.2886006596294)
> (1 řádka)
>
>
> Učebnice Postgisu:
>
> http://workshops.boundlessgeo.com/postgis-intro/
>
> je IMO super, ale nedá se to za 10 minut
>
> --
> Petr
>
>
> _______________________________________________
> Talk-cz mailing list
> Talk-cz na openstreetmap.org
> https://lists.openstreetmap.org/listinfo/talk-cz
>





Další informace o konferenci talk-cz