Tartalomjegyzék:

Egyéni stilizált térképek létrehozása az OpenStreetMap használatával: 7 lépés (képekkel)
Egyéni stilizált térképek létrehozása az OpenStreetMap használatával: 7 lépés (képekkel)

Videó: Egyéni stilizált térképek létrehozása az OpenStreetMap használatával: 7 lépés (képekkel)

Videó: Egyéni stilizált térképek létrehozása az OpenStreetMap használatával: 7 lépés (képekkel)
Videó: Zero to Hero ControlNet Tutorial: Stable Diffusion Web UI Extension | Complete Feature Guide 2024, November
Anonim
Egyéni, stilizált térképek létrehozása az OpenStreetMap használatával
Egyéni, stilizált térképek létrehozása az OpenStreetMap használatával

Ebben az utasításban leírok egy folyamatot, amellyel saját, egyedi stílusú térképeket hozhat létre. A stilizált térkép olyan térkép, ahol a felhasználó megadhatja, hogy mely adatrétegek jelenjenek meg, valamint meghatározhatja az egyes rétegek megjelenítésének stílusát. Először leírom azt a folyamatot, amellyel szoftvereket írhat a térképek stilizálására, majd egy példát mutatok be a Python szoftverre, amelyet a feladat végrehajtásához írtam.

A következő videó kiemeli, hogyan készítek én stilizált térképeket, de olvass tovább a bensőséges részletekért. Nagyon izgatott vagyok, hogy látom, mit hoz létre a közösség!

Mi a motivációm a projekt mögött?

Őszintén szólva azért kezdtem el ezt a projektet, mert azt gondoltam, hogy szórakoztató lenne. Ez az ötlet kavargott a fejemben az elmúlt egy évben, és végre szántam rá időt, hogy megvalósítsam. Egy napos prototípuskészítés után néhány alapvető szkripteléssel rendkívül ígéretes eredményeket tudtam elérni - annyira ígéretesnek, hogy tudtam, hogy a forgatókönyveimet úgy kell formalizálnom, hogy mások könnyen elkészíthessék saját alkotásaikat.

Ennek az oktathatónak az írásában való motivációm annak köszönhető, hogy nagyon minimális információt találtam arról, hogyan lehet a semmiből saját stilizált térképeket készíteni. Remélem megosztom a közösséggel a tanultakat.

Erőforrások/linkek:

  • OpenStreetMap
  • OpenStreetMap Legalese
  • Github adattár

Kellékek

  • Python disztribúció (Anaconda és Python 3.6 -ot használtam)
  • PyQt5 (a GUI függőségekhez)

1. lépés: Az I. folyamat meghatározása: OSM fájl letöltése

A folyamat meghatározása I: Az OSM fájl letöltése
A folyamat meghatározása I: Az OSM fájl letöltése

Amikor először elkezdtem ezt a projektet, a legszembetűnőbb kérdés az volt, hogy "hol szerezhetek térképadatokat". Természetesen, ahogy az várható volt, azonnal a Google Térképre gondoltam. Jelentős kutatás után rájöttem, hogy a Google valóban nem akarja, hogy az emberek kreatív értelemben vagy más módon játsszanak az adataikkal. Valójában kifejezetten tiltják az internetes kaparást a Google Térképen.

Szerencsére kétségbeesésem rövid életű volt, amikor felfedeztem az OpenStreetMap-ot (OSM). Az OSM egy együttműködési projekt, amelyben a világ minden tájáról származó emberek vesznek részt adatszolgáltatásban. Az OSM kifejezetten engedélyezi adatainak nyílt végű használatát a nyílt forráskódú szoftver nevében. Mint ilyen, az OSM weboldalának meglátogatása kezdődik a térkép stilizálási útján.

Miután megérkezett az OSM webhelyére, kattintson az "Exportálás" fülre a térkép exportálási eszközeinek megjelenítéséhez. Most nagyítson, hogy megtekinthesse azt a régiót, amellyel térképadatokat szeretne gyűjteni. Válassza a "Másik terület kézi kiválasztása" linket, amely egy mezőt jelenít meg a képernyőn. Formálja és helyezze ezt a dobozt az érdeklődési területre. Ha elégedett, kattintson az "Export" gombra az OSM adatfájl letöltéséhez.

1. megjegyzés: Ha a kiválasztott régió túl sok adatot tartalmaz, akkor hibaüzenetet kap, hogy túl sok csomópontot választott ki. Ha ez történik veled, kattintson az "Overpass API" gombra a nagyobb fájl letöltéséhez.

2. megjegyzés: Ha a letöltött OSM fájl nagyobb, mint 30 MB, az általam írt Python program észrevehetően lelassul. Ha eltökélt szándéka egy nagy régió használata, fontolja meg a szkript írását a felesleges adatok kidobásához, amelyeket nem tervez rajzolni.

2. lépés: A folyamat meghatározása II: Az adatok megértése

A folyamat meghatározása II: Az adatok megértése
A folyamat meghatározása II: Az adatok megértése
A folyamat meghatározása II: Az adatok megértése
A folyamat meghatározása II: Az adatok megértése
A folyamat meghatározása II: Az adatok megértése
A folyamat meghatározása II: Az adatok megértése
A folyamat meghatározása II: Az adatok megértése
A folyamat meghatározása II: Az adatok megértése

- Megvannak az adatok… most mi van?

Először nyissa meg a letöltött OSM fájlt a kedvenc szövegszerkesztő szoftverében. Először észreveszi, hogy ez egy XML fájl, ami nagyszerű! Az XML elemzése elég egyszerű. A fájl eleje közel azonosnak kell lennie a lépés első képével - néhány alapvető metaadat és földrajzi határ megjelenik.

A fájl görgetése közben három adatelemet észlel:

  1. Csomópontok
  2. Módokon
  3. Kapcsolatok

A legalapvetőbb adatelem, a csomópont egyszerűen egyedi azonosítót, szélességet és hosszúságot társít. Természetesen vannak további metaadatok, de nyugodtan elvethetjük.

Az utak csomópontok gyűjteményei. Egy mód zárt alakzatként vagy nyílt végű vonallá alakítható. A módszerek az egyedi azonosítójuk alapján azonosított csomópontok gyűjteményéből állnak. Kulcsokkal vannak címkézve, amelyek meghatározzák azt az adatcsoportot, amelyhez tartoznak. Például a fenti harmadik képen látható módszer a "hely" adatcsoporthoz és annak "sziget" alcsoportjához tartozik. Más szóval, ez a sajátos módszer a "sziget" réteghez tartozik a "hely" csoport alatt. A módoknak egyedi azonosítói is vannak.

Végül a kapcsolatok módszerek gyűjteményei. Egy reláció reprezentálhat egy bonyolult alakzatot lyukakkal vagy több régióval. A kapcsolatoknak egyedi azonosítójuk is lesz, és a módokhoz hasonlóan lesznek címkézve.

Ezekről az adatelemekről az OSM wikiből olvashat bővebben:

  • Csomópontok
  • Módokon
  • Kapcsolatok

3. lépés: A folyamat meghatározása III: Az adatok feldolgozása

A folyamat meghatározása III: Az adatok megemésztése
A folyamat meghatározása III: Az adatok megemésztése

Most legalább felületesen meg kell értenie az OSM fájlt alkotó adatelemeket. Ezen a ponton szeretnénk olvasni az OSM adatokat az Ön által választott nyelven. Bár ez a lépés Python-központú, ha nem szeretné használni a Python-t, akkor is olvassa el ezt a részt, mivel néhány tippet és trükköt tartalmaz.

Az xml csomag alapértelmezés szerint a legtöbb szabványos Python disztribúcióhoz tartozik. Ezt a csomagot használjuk az OSM fájlunk nagyon egyszerű elemzésére, amint az az első képen látható. Egyetlen ciklusban feldolgozhatja az egyes adatelemekhez tartozó OSM adatok kezelését.

A kép utolsó sorában észreveszi, hogy ellenőrzöm a "határok" címkét. Ez a lépés létfontosságú a szélességi és hosszúsági értékek képernyőre történő lefordításában. Erősen ajánlom ezt a konverziót az OSM fájl betöltésekor, mivel az adatok tömeges átalakítása folyamatigényes.

Ha már a szélességek és hosszúságok képernyő -koordinátákká való átalakításáról beszélünk, itt van egy link az általam írt számítási függvényhez. Valószínűleg valami furcsaságot fog észrevenni, amikor a szélességet képernyő -koordinátákká konvertálja. A hosszúsághoz képest van egy extra lépés is! Mint kiderült, az OSM adatok modellezése Pseudo-Mercator vetítési módszerrel történik. Szerencsére az OSM fantasztikus dokumentációval rendelkezik erről a témáról, és jelentős számú nyelv számára biztosítja a szélességi átváltási funkciókat. Fantasztikus!

Megjegyzés: A kódomban a képernyő koordinátája (0, 0) a képernyő bal felső sarka.

4. lépés: A Python Map Stylizer implementálása

Python Map Stylizer implementáció
Python Map Stylizer implementáció
Python Map Stylizer implementáció
Python Map Stylizer implementáció
Python Map Stylizer implementáció
Python Map Stylizer implementáció

Eddig megvitattam az OSM adatfájlt - mi az, hogyan kell elolvasni és mit kell vele csinálni. Most azt a szoftvert fogom tárgyalni, amelyet a stilisztikai térképi vizualizáció kezelésére írtam (a bevezetőben található GitHub repo).

Sajátos megvalósításom a renderelési folyamat felhasználói irányítására összpontosít. Konkrétan megengedem a felhasználónak, hogy kiválassza azokat a rétegeket, amelyeket látni szeretne, és hogyan szeretné megjeleníteni a réteget. Ahogy korábban röviden említettem, az elemek két osztályba sorolhatók: kitöltő elemek és sorok. A kitöltéseket csak egy szín határozza meg, míg a vonalakat a szín, a vonal szélessége, a vonal stílusa, a vonal sapka stílusa és a vonal összeillesztési stílus határozza meg.

Amint a felhasználó módosítja a rétegstílusokat és a láthatóságot, a módosítások a jobb oldali térkép widgetben jelennek meg. Ha a felhasználó a saját tetszés szerint módosította a térkép megjelenését, beállíthatja a térkép maximális méretét, és elmentheti a térképet képként a számítógépére. A kép mentésekor egy felhasználói konfigurációs fájl is mentésre kerül. Ez biztosítja, hogy a felhasználó bármikor fel tudja hívni és újra felhasználhatja azt a konfigurációt, amelyet egy adott kép létrehozásához használt.

5. lépés: A megvalósítás hátránya + megoldás

A megvalósítás hátránya + megoldás
A megvalósítás hátránya + megoldás
A megvalósítás hátránya + megoldás
A megvalósítás hátránya + megoldás

Amikor először kezdtem el manuálisan stilizálni a térképet, rájöttem, hogy ez egy meglehetősen fárasztó folyamat. A maximális vezérlés felajánlása egyszerűen lehengerlő lehet a rendelkezésre álló "gombok" nagy száma miatt. Van azonban egy egyszerű megoldás, amely egy kis extra szkripteléssel jár.

Azzal kezdtem, hogy meghatároztam, mely rétegek érdekelnek engem különösen. Ennek az oktathatónak az alkalmazásában tegyük fel, hogy leginkább az épületek (mindegyik), a folyók, a főutak és a felszíni utcák érdekelnek. Írok egy szkriptet, ahol létrehozok egy konfigurációs példányt, megfelelően beállítom a rétegállapotokat a setItemState () függvény és a meghatározott állandók segítségével, és beállítom a színeket a setValue () használatával, hogy hogyan szeretném megjeleníteni a rétegeimet. A kapott mentett konfigurációs fájl másolható a configs mappába, és a felhasználó betöltheti.

Példa szkript a fenti képen. A második kép egy minta arra, hogy hogyan néznek ki a segítő funkciók, és mivel alapvetően mindegyikük azonos, csak változó állandók mellett, csak egy példa képét mellékeltem.

6. lépés: Fejlesztendő területek

Fejlesztendő területek
Fejlesztendő területek

Miután átgondoltam a szoftver implementációmat, több olyan területet is azonosítottam, amelyek hasznos fejlesztések lehetnek az energiafelhasználók számára.

  1. Dinamikus rétegmegjelenítés. Jelenleg van egy előre definiált rétegeim listája, ennyi. Az indoklás része volt az a nehézség, hogy meg kell határozni, hogy egy réteg legyen -e vonal vagy kitöltés. Ennek eredményeként szinte minden megnyitott OSM -fájlnál rengeteg figyelmeztetés fogadja a rétegeket, amelyek nem jelennek meg. Gyakran ezek olyan minimálisak, hogy nem jelent problémát, de biztosan hiányoznak a kritikus rétegek. A dinamikus rétegmegjelenítés kiküszöböli ezeket az aggályokat.
  2. Dinamikus réteg hozzárendelés. Ez kéz a kézben jár az #1; ha dinamikus rétegmegjelenítést szeretne, akkor dinamikus réteg -hozzárendelésre van szüksége (azaz egy kitöltő réteg és egy vonalréteg azonosítására). Ezt ésszerűen meg lehet valósítani, ahogy megtanultam, mert azok a módok, amelyek első és utolsó csomópontja azonos, zárt utak lesznek, és ezért kitöltve.
  3. Színcsoportok. A stilizált térkép gyakran több réteggel rendelkezik, amelyek azonos stílusúak, és ha lehetővé teszi a felhasználó számára, hogy egyszerre módosítsa a csoport stílusát, jelentősen csökkentené a felhasználó egyes rétegek szerkesztésére fordított idejét.

7. lépés: Gondolatok lezárása

Záró gondolatok
Záró gondolatok
Záró gondolatok
Záró gondolatok
Záró gondolatok
Záró gondolatok

Köszönöm mindenkinek, hogy időt szánt az Instructable -re. Ez a projekt a több órás kutatás, tervezés, programozás és hibakeresés csúcspontját jelenti. Remélem sikerült olyan indítópultot biztosítani, amelyből saját projektet építhet, vagy építhet a már leírtakra. Remélem, hogy hiányosságaim és tippjeim sok pontot tartalmaznak a tervezés során. Ha kevésbé vagy hajlandó programozni, és hajlamosabb vagy műalkotások létrehozására, szívesen megnézném, mit teszel a megjegyzésekben! A lehetőségek végtelenek!

Külön köszönet az OpenStreetMap közreműködőinek! Az ilyen projektek nem valósulhatnának meg jelentős erőfeszítéseik nélkül.

Kérjük, tudassa velem, ha bármilyen kérdése van a megjegyzésekben!

Maps Challenge
Maps Challenge
Maps Challenge
Maps Challenge

Második hely a Térkép Kihívásban

Ajánlott: