Skript pro výpočet souřadnice středu cesty?

22 zpráv
Zpět na přehled

Skript pro výpočet souřadnice středu cesty?

22 zpráv MJJMJRLJ 10 účastníků 8 min čtení
  1. Matěj Cepl mcepl na cepl.eu #m3b9165
    Dobrý den, existuje nějaká (nejlépe Pythonní) knihovna pro programatický přístup k OSM? Chtěl bych být schopen rychle vytvářet Geo-URI vesnice, abych ji mohl zmínit třeba na Twitteru. Když někdo zmíni, že Ukrajinská armáda dobyla Novomykilske, tak si rychle najdu, že se jedná asi o https://www.openstreetmap.org/way/30722274, ale chtěl bych něco, co by mi z tohoto URL vygenerovalo něco jako 49.2943095,38.1804967 (přibližně, ne nutně tento bod). Jedná se tedy o dva problémy: 1. Jak vygenerovat seznam všech souřadnic dané cesty. 2. Jak vypočítat něco jako ?střed? obecného geometrického útvaru. Doufám, že na 2. někde existuje nějaký více méně standardní algoritmus (existuje?) a existuje nějaká knihovna na 1.? Děkuji za jakékoli nakopnutí správným směrem. Matěj
  2. Jan Martinec jan na martinec.name #m1840d3
    Rozkliknu, posunu/zazoomuju mapu dle potřeby, dostanu něco jako https://www.openstreetmap.org/way/30722274#map=9/49.2705/38.2104 , hotovo. Netřeba skriptů, pokud to nepotřebuješ dělat automatizovaně. Zdar, HPM
  3. Matěj Cepl mcepl na cepl.eu #me0ca7d
    Rozkliknu, posunu/zazoomuju mapu dle potřeby, dostanu něco jako https://www.openstreetmap.org/way/30722274#map=9/49.2705/38.2104 , hotovo. Netřeba skriptů, pokud to nepotřebuješ dělat automatizovaně.
    Automatizace byla pochopitelně celý point a chtěl jsem komunikovat v platform-independent stylu (takže Geo-URL raději nežli normální https do osm.org). Představoval jsem si něco jako: $ osm_stred 'https://www.openstreetmap.org/way/30722274#map=13/49.2925/38.1816' geo:49.2943095,38.1804967 $ (asi spíše tak, nežli hledání podle názvu, protože potřebuji prohledávat možné varianty). Matěj
  4. Miroslav Suchý mirek na rodina-sucha.cz #m6065a0
    Doufám, že na 2. někde existuje nějaký více méně standardní algoritmus (existuje?) a existuje nějaká knihovna na 1.? Děkuji za jakékoli nakopnutí správným směrem.
  5. Jan Macura macurajan na gmail.com #m2ee256
    Ahoj
    (...) Jedná se tedy o dva problémy: 1. Jak vygenerovat seznam všech souřadnic dané cesty. 2. Jak vypočítat něco jako ?střed? obecného geometrického útvaru. Doufám, že na 2. někde existuje nějaký více méně standardní algoritmus (existuje?) a existuje nějaká knihovna na 1.?
    Ad 2) jakože.. vždycky si to můžeš vypočítat ručně ( https://math.stackexchange.com/questions/90463/how-can-i-calculate-the-centroid-of-polygon).Ale šel bych tou cestou Shapely ;-) Ad 1) nerozumím moc problému. Možná přesněji formuluj, co by mělo být vstupem toho Tvého procesu a co očekáváš za výstup. Cesta je definována svými souřadnicemi. Resp. v OSM modelu je definována seznamem svých uzlů, ale není problém exportovat si data to nějakého standardního formátu, kde samozřejmě budou souřadnice, třeba GeoJSON, GPX, GML, KML, ... H.
  6. Jiří Sedláček jirisedlacek na gmail.com #m798a29
    Ahoj, se shapely jsem pracoval, ale bacha ? pokud si to pamatuju dobře, tak pro větší (více bodů) polygony ty výpočty nebyly úplně fofrem. Spíš to bylo místama dost pomalý. Ale zas se s tím pracuje snadno, jen tam musíš nějak dostat ta data ... (geojson to myslím umí).
  7. ramirezhav na seznam.cz ramirezhav na seznam.cz #m3fa5e2
    Tohle téma mě taky zajímá, ale jen z hlediska kachlí. Jelikož vím, že země je kulatá, dá se postupovat v případě kachle tak, že se jen spočítá rozdíl souřadnic (x2-x1)/256 * poloha, která mě zajímá, nebo se musí počítat se zaoblením země jako s nějakou konstantou, která se má započítat?
  8. Lukáš Karas lukas.karas na centrum.cz #m811fc6
    Ahoj, pokud by jsi měl zájem o čistě offline řešení, mohu odkázat na OSMScout knihovnu: https://github.com/Framstag/libosmscout/ Je ale psaná v C++ a Python binding nemáme, takže nevím jak moc je pro tebe vnodná. Data pro danou zemi je buď potřeba importovat, nebo stáhnout ze serveru pomocí OSMScout2 UI. Hledání místa podle názvu pak použít LocationLookup demo: ./Demos/LocationLookup ~/Maps/europe-ukraine-20221022-121415 "Novomykilske" = Region (????????? ??????? ???????) * ????????? ??????? ???????/?????????????? ?????/????????? ???????/??????? ... - Area 304695217 boundary_administrative Poté pomocí DumpData toolu zjistit střed polygonu 304695217... ./DumpData/DumpData ~/Maps/europe-ukraine-20221022-121415 -ao 304695217 Area { OSM id: 13631713 fileOffset: 304695217 boundingBox: [49,18544 N 39,76960 E - 49,61710 N 40,22758 E] center: 49,40127 N 39,99859 E cell level: 8 AdminLevel: 7 ... S pozdravem, Lukáš
  9. Matěj Cepl mcepl na cepl.eu #md28eb7
    Zajímavé. Matěj
  10. Jan Martinec jan na martinec.name #m43381e
    Ahoj, Pokud to má být dostatečně mrňavý polygon (jednotky km a méně), lze předstírat placatou Zemi, a prostě udělat průměr z. šířky a průměr délky. Je to ošklivé, je to nepřesné, je to kacířské, a je to triviální a mnohdy dostačující ;) Zdar, HPM
  11. Matěj Cepl mcepl na cepl.eu #m16f8d4
    Ale šel bych tou cestou Shapely ;-)
    To vypadá užitečně.
    Ad 1) nerozumím moc problému. Možná přesněji formuluj, co by mělo být vstupem toho Tvého procesu a co očekáváš za výstup.
    Potřebuji přístup do OSM, abych z toho URL dostal seznam souřadnic jednotlivých bodů polygonu. Dává smysl? Matěj
  12. Matěj Cepl mcepl na cepl.eu #maaa577
    Je ale psaná v C++ a Python binding nemáme, takže nevím jak moc je pro tebe vnodná. Data pro danou zemi je buď potřeba importovat, nebo stáhnout ze serveru pomocí OSMScout2 UI.
    Tak to by šlo nějak obejít pomocí Cythonu, ale nemáme tu knihovnu balenou pro openSUSE, takže si ještě počkám jestli nevymyslím něco jednoduššího. Děkuji za radu. Matěj
  13. Matěj Cepl mcepl na cepl.eu #m8fdb3d
    Pokud to má být dostatečně mrňavý polygon (jednotky km a méně), lze předstírat placatou Zemi, a prostě udělat průměr z. šířky a průměr délky. Je to ošklivé, je to nepřesné, je to kacířské, a je to triviální a mnohdy dostačující ;)
    Good point. Matěj
  14. Jáchym jachym na cepicky.ch #m435d3c
    Pardon, že se vkládám do debaty, asi trochu mimo libovolná  knihovna pro práci s geometriemi dává všem objektům atribut `centroid` bod nemusí nutně ležet na linii/v polygonu ale třeba to pomůže? ---- dne Tue, 15 Nov 2022 20:43:50 +0100, Matěj Cepl <mcepl na cepl.eu> napsal ---
    Pokud to má být dostatečně mrňavý polygon (jednotky km a méně), lze předstírat placatou Zemi, a prostě udělat průměr z. šířky a průměr délky. Je to ošklivé, je to nepřesné, je to kacířské, a je to triviální a mnohdy dostačující ;)
    Good point. Matěj
  15. Jan Macura macurajan na gmail.com #mf3c622
    Ad 1) nerozumím moc problému. Možná přesněji formuluj, co by mělo být vstupem toho Tvého procesu a co očekáváš za výstup.
    Potřebuji přístup do OSM, abych z toho URL dostal seznam souřadnic jednotlivých bodů polygonu. Dává smysl?
    Mě moc ne, ale možná si sedím na vedení :-) Možná hledáš něco jako Overpass (https://overpass-turbo.eu/)? Nebo Query API ( https://www.openstreetmap.org/query?lat=49.77675&lon=18.45250)? Nebo Nominatim? Nebo něco úplně jiného..? H.
  16. Jan Macura macurajan na gmail.com #m53ac7c
    Pokud to má být dostatečně mrňavý polygon (jednotky km a méně), lze předstírat placatou Zemi, a prostě udělat průměr z. šířky a průměr délky. Je to ošklivé, je to nepřesné, je to kacířské, a je to triviální a mnohdy dostačující ;)
    Good point.
    Ani moc ne. Takový postup ti nedá střed polygonu, jak jej obvykle chápeme (tj. jeho těžiště), ale získáš střed jeho minimálního ohraničujícího obdélníku (bounding box / envelope). Tzn. dost snadno dostaneš třeba bod který leží zcela mimo ten vstupní polygon. V Tvém případě by to mohlo mít ten důsledek, že třeba pro polygon města Kdyně <https://www.openstreetmap.org/relation/439157#map=13/49.3785/13.0482> (sry, ukrajinský vesnice tak dobře neznám jako ty český) bys dostal bod někde v Brnířově. Protože ano, i takhle může vypadat území obce... Ergo možná to může být někdy dostačující, ale pro zmiňovaný use-case bych to jako vhodné řešení neviděl. Obzvlášť, když zmiňovaná knihovna Shapely ti umí vyplivnout očekávaný výsledek bez velké námahy. H.
  17. Jan Dudík jan.dudik na gmail.com #m883e39
    Ani moc ne. Takový postup ti nedá střed polygonu, jak jej obvykle chápeme
    (tj. jeho těžiště), ale získáš střed jeho minimálního ohraničujícího obdélníku (bounding box / envelope). Tzn. dost snadno dostaneš třeba bod který leží zcela mimo ten vstupní polygon. V Tvém případě by to mohlo mít ten důsledek, že třeba pro polygon města Kdyně <https://www.openstreetmap.org/relation/439157#map=13/49.3785/13.0482> (sry, ukrajinský vesnice tak dobře neznám jako ty český) bys dostal bod někde v Brnířově. Protože ano, i takhle může vypadat území obce... Ale ani těžiště nemusí nutně ležet na území polygonu. Jsou obce s
    exklávami i obce s enklávami. --- JAnD
  18. Mirek Dlask dlask.m na gmail.com #m7ac1d5
    Centroid v postgisu má ještě sourozence https://postgis.net/docs/ST_Centroid.html Střed plochy mi nezaručí, že zjištěný bod bude blízko obydlené části města, vesnice. Část bodů (odkazů) skončí v lese, nebo na poli. V OSM jsou nejen hranice, ale každá obec má i bod v zastavěné části obce, nebo přinejhorším hodně blízko. place=* Nebylo by to lepší řešení? Bez ohledu na výše uvedené bude muset řešit konflikty názvů. Naše Babice jsou v okresech: Prachatice, Praha-východ, Hradec Králové, Olomouc, Třebíč, Uherské Hradiště? Takže něco na ekvivalent našeho okresu, kraje. https://postgis.net/docs/ST_Contains.html Mir
  19. Jan Macura macurajan na gmail.com #m43a9f8
    út 15. 11. 2022 v 21:39 odesílatel Jan Macura <macurajan na gmail.com>
    Ani moc ne. Takový postup ti nedá střed polygonu, jak jej obvykle chápeme (tj. jeho těžiště), ale získáš střed jeho minimálního ohraničujícího obdélníku (bounding box / envelope). Tzn. dost snadno dostaneš třeba bod který leží zcela mimo ten vstupní polygon. V Tvém případě by to mohlo mít ten důsledek, že třeba pro polygon města Kdyně <https://www.openstreetmap.org/relation/439157#map=13/49.3785/13.0482> (sry, ukrajinský vesnice tak dobře neznám jako ty český) bys dostal bod někde v Brnířově. Protože ano, i takhle může vypadat území obce... Ale ani těžiště nemusí nutně ležet na území polygonu. Jsou obce s
    exklávami i obce s enklávami.
    Good point. H.
  20. Jan Martinec jan na martinec.name #m00f58d
    Typicky Středočeský kraj s těžištěm v Praze;) Ale napadá mě, že obec může mít ve své OSM relaci admin_centre - teda pokud je to zmapovaný, no. Zdar, HPM
  21. Matěj Cepl mcepl na cepl.eu #maf0d23
    Mě moc ne, ale možná si sedím na vedení :-) Možná hledáš něco jako Overpass (https://overpass-turbo.eu/)? Nebo Query API ( https://www.openstreetmap.org/query?lat=49.77675&lon=18.45250)? Nebo Nominatim? Nebo něco úplně jiného..?
    Přesně tak, https://git.sr.ht/~mcepl/osm_where D?oh! Matěj
  22. Matěj Cepl mcepl na cepl.eu #m634a79
    Ani moc ne. Takový postup ti nedá střed polygonu, jak jej obvykle chápeme (tj. jeho těžiště), ale získáš střed jeho minimálního ohraničujícího obdélníku (bounding box / envelope). Tzn. dost snadno dostaneš třeba bod který leží zcela mimo ten vstupní polygon. V Tvém případě by to mohlo mít ten důsledek, že třeba pro polygon města Kdyně <https://www.openstreetmap.org/relation/439157#map=13/49.3785/13.0482> (sry, ukrajinský vesnice tak dobře neznám jako ty český) bys dostal bod někde v Brnířově. Protože ano, i takhle může vypadat území obce...
    Tak jsem se obešel bez shapely, OSMPythonTools to dává taky, takže stitny~$ osm_where -l cs -a CZ Kdyně geo:49.3970014,13.0507001 stitny~$ což je docela slušné a je to uvnitř Kdyně. Matěj
Napsat odpověď e-mailem… Odpovědět

Otevře váš e-mailový klient. Odpovědi pak sledujte zde na webu.