Klub miłośników turystyki kamperowej - CamperTeam

Mapy, e-mapy, przewodniki foldery - Instrukcja - wydobywanie danych POI z map OpenStreetMap

Spax - 2020-04-19, 21:51
Temat postu: Instrukcja - wydobywanie danych POI z map OpenStreetMap
CO TO ZA MAPA »»»

*******************************************************************
INSTRUKCJA WYDOBYWANIA DANYCH Z MAP OSM (OpenStreetMap) – LINUX
*******************************************************************

Dlaczego warto wyrwać mapie te dane?

Zazwyczaj bardzo trudno jest wyświetlić POI (użyteczne miejsca) w aplikacji do mapowania w taki sposób, aby łatwo było zobaczyć interesujące nas punkty POI podczas pomniejszania. Na przykład możemy chcieć zobaczyć wszystkie miejsca, gdzie na dużym obszarze może być dostępna woda pitna, ale większość aplikacji mapujących nie obsługuje tej funkcji.
Za to prawie wszystkie aplikacje mapujące (np. maps.me, osmand) obsługują format GPX czy KML do wyświetlania punktów nawigacyjnych, więc jeśli możemy stworzyć pliki GPX zawierające tylko punkty nawigacyjne, którymi jesteśmy zainteresowani, rozwiązałoby to nasz problem.
Narzędzie, które przedstawię wyodrębnia POI OSM z plików danych OSM dostępnych na stronie OpenStreetMap/Geofabrik i buduje pliki GPX na podstawie wyrażeń znaczników (węzłów).

Zobaczcie przykład: przybliżenie 16 i 18 mapy miejscowości Patra w Grecji (online) . Na dużym powiększeniu widać symbole kranika i prysznica. Na mniejszym niestety już nie.







Na przykładzie Macedonii (bo to mały kraj, a co za tym idzie mniej danych zaszytych w mapie)

Zaczynamy 1: czyli co nam potrzebne pod Linuksem (Windows podobnie - podam linki - resztę kombinujcie sami:)).

1 - Instalujemy paczki: cargo, cargo-doc i python3 (zalecane)) lub korzystamy z curl » link »»» https://doc.rust-lang.org/cargo/getting-started/installation.html
1.a - Dla Windowsa pobieramy program "rustup-init.exe" » link »»» https://win.rustup.rs/
2 - Pobieramy "OSM to GPX Node extractor" » link »»» https://github.com/simao/osm-gpx
3 - Rozpakowujemy program do wydobywania w dowolnym miejscu na dysku (najwygodniej tam, dokąd będziemy ściągać mapy)

Zaczynamy 2: czyli ściągamy mapę (format pliku to osm.pbf)

1 - Na stronie Geofabrik » link »»» http://download.geofabrik.de/europe.html wybieramy interesującą nas mapę.
2 - Zapisujemy w katalogu głównym programu "osm-gpx-master"
3 - Otwieramy terminal (cmd - pod windowsem) w katalogu z programem i mapą.
3a - Pod windowsem nie uruchomiałem programu - musicie sami kombinować jak uruchomić z linii poleceń pliki z rozszerzeniem .rs

Działamy 1:
1 - Aby wydobyć dane o wodzie (pamiętacie to symbol kranika) uruchamiamy program takim oto poleceniem przy czym:

a) --osm-file macedonia-latest.osm.pbf - to pobrana mapa
b) --name Woda - dowolna nazwa (może być dupa) i tak się nam później wyświetli na mapie.
c) --output macedonia-woda.gpx - nazwa pliku wyjściowego gpx, którego użyjemy do naszych map.
d) --exp "amenity=drinking_water" - wydobywane dane - w tym przypadku woda pitna.

Kod:

cargo run -- --osm-file macedonia-latest.osm.pbf --name Woda --output macedonia-woda.gpx --exp "amenity=drinking_water"


Przykład działania programu »»» tu "Studnia" czyli man_made=water_well
Kod:

$ cargo run -- --osm-file macedonia-latest.osm.pbf --name Studnia --output macedonia-woda-studnia.gpx --exp "man_made=water_well"
Finished dev [unoptimized + debuginfo] target(s) in 0.15s
Running `target/debug/osm-gpx --osm-file macedonia-latest.osm.pbf --name Studnia --output macedonia-woda-studnia.gpx --exp man_made=water_well`
 INFO  osm_gpx::osm > Found node named Some("Studnia") at Point(Coordinate { x: 21.337990599999998, y: 41.0320742 })
 INFO  osm_gpx::osm > Found node named Some("Studnia") at Point(Coordinate { x: 20.7977745, y: 41.112003 })
 INFO  osm_gpx::osm > Found node named Some("Studnia") at Point(Coordinate { x: 20.833230099999998, y: 41.086294599999995 })
 INFO  osm_gpx      > finished, found 3 matching waypoints



I to już wszystko. Otrzymaliśmy plik o nazwie macedonia-woda.gpx - działajcie, próbujcie i się denerwujcie :haha:

ZbigStan - 2020-04-20, 06:13

Spax, Jeszcze nie przećwiczyłem, ale widzę przydatność. Za trud :pifko . Pozdrawiam
andrzej627 - 2020-04-20, 12:15

Pobieram odpowiednią mapę jak wyżej z http://download.geofabrik.de/

Ekstrakcję pod Windows robię programem Osmosis.

Przykładowo tak u mnie wygląda komenda, która wyłuskuje punkty (nodes) drinking_water:

Kod:
E:\OSM\osmosis-0.47.4\bin\osmosis  --read-pbf E:\OSM\greece-latest.osm.pbf  --node-key-value keyValueList="amenity.drinking_water"  --write-xml E:\OSM\water.osm


Otrzymany plik (tutaj water.osm) konwertuje na gpx programem GPSBabel. W tej sposób powstała mapa Grecja - woda (drinking water). Te dane można wstawić do MAPS.ME wg przepisu w wątku Google My Maps i MAPS.ME.

Gdyby ktoś chciał też tym się pobawić, chętnie pomogę.

izola - 2020-04-20, 12:44

Cytat:
INSTRUKCJA WYDOBYWANIA DANYCH Z MAP OSM (OpenStreetMap) – LINUX

Za chęci :ok

andrzej627 - 2020-04-20, 16:43

Parę dni temu napisałem
Cytat:
Niestety z obszarami (ways) nie jest już taka prosta sprawa

Teraz mam dobrą wiadomość. onionskin podpowiedział, aby używać https://overpass-turbo.eu/

Chciałem wyłuskać plaże, które najczęściej są opisane jako ways. Zrobiłem tak, jak na zdjęciu dla Krety.

1/ Otrzymane dane wyeksportowałem do pliku gpx, który zawiera punkty (nodes) i ślady (ways).
2/ Zaimportowałem go do mapy Google My Maps, gdzie pojawiły się punkty, ślady oraz punkty początkowe i końcowe śladów (w tych samych miejscach).
3/ Wyeksportowałem mapę do pliku kml.
4/ Z pliku kml usunąłem ślady i punkty początkowe.
5/ Edytowany plik kml zaimportowałem do nowej warstwy mapy.
6/ Z mapy usunąłem pierwotną warstwę.

W danych OSM na Krecie jest 71 plaż piaszczystych (5 nodes + 66 ways): Kreta - plaże piaszczyste

Wszelkie komentarze są mile widziane. :spoko

Spax - 2020-04-20, 17:54

izola, ZbigStan – dzięki za kufelek :spoko



andrzej627 napisał/a:
Zrobiłem tak, jak na zdjęciu dla Krety.


Dla nas prościej jak skopiujesz kod (taki jak na zdjęciu) i po prostu wkleisz tutaj. Czemu się męczyć w przepisywanie?

Przykład:
/*
This query looks for nodes, ways and relations
with the given key/value combination.
Choose your region and hit the Run button above!
*/
[out:json][timeout:25];
// gather results
(
// query part for: “man_made=water_well”
node["man_made"="water_well"]({{bbox}});
way["man_made"="water_well"]({{bbox}});
relation["man_made"="water_well"]({{bbox}});
);
// print results
out body;
>;
out skel qt;
[/b]

andrzej627 - 2020-04-20, 19:49

Nic nie trzeba przepisywać. Jest w opisie mapy mapy. :spoko

Wklejam tutaj.
Kod:

/*
This has been generated by the overpass-turbo wizard.
The original search was:
"natural=beach and surface=sand"
*/
[out:json][timeout:25];
// gather results
(
  // query part for: “natural=beach and surface=sand”
  node["natural"="beach"]["surface"="sand"]({{bbox}});
  way["natural"="beach"]["surface"="sand"]({{bbox}});
  relation["natural"="beach"]["surface"="sand"]({{bbox}});
);
// print results
out body;
>;
out skel qt;

Spax - 2020-04-20, 20:52

andrzej627,
Coś na skałach wylądowałeś :haha:
kliknij sobie tu: »»» https://overpass-turbo.eu/s/T5L

oraz tu »»» https://wiki.openstreetmap.org/wiki/Tag:natural%3Dbeach

wiesiek t - 2020-04-21, 08:57

Spax andrzej627 wkładacie pracę i udostępniacie nam swoja wiedzę żebyśmy mogli trafić na piękne i przydatne miejsca

Piwka poszły

Dotychczas jeżdziłem na nawigacji fabrycznej, teraz używam google.maps ale , jako fachowcy

czytam,używacie Maps.Me jaka jest przewaga jednej nad drugą może krótko ktoś napisze.

z góry Dzięki.

andrzej627 - 2020-04-21, 09:19

Spax napisał/a:

Coś na skałach wylądowałeś :haha:

Wylądowałem na skałach, bo z całego obszaru plaży wybrałem skrajny (pierwszy i ostatni) punkt (Grammeno Beach – koniec 35.2325, 23.6323). Zdaję sobie sprawę, że nie jest to metoda idealna. Umiesz z tej listy wybrać lepiej? Na mapie OSM dla Garmina punkt Grammeno Beach jest na środku obszaru a nie na skraju.
Kod:
   <trk>
    <name>Grammeno Beach</name>
    <desc>name=Grammeno Beach
natural=beach
surface=sand
type=multipolygon</desc>
    <link href="http://osm.org/browse/relation/537006"/>
    <trkseg>
      <trkpt lat="35.2325009" lon="23.6323064"/>
      <trkpt lat="35.2329239" lon="23.6326884"/>
      <trkpt lat="35.2331303" lon="23.6325099"/>
      <trkpt lat="35.2332132" lon="23.6323112"/>
      <trkpt lat="35.2333083" lon="23.6322535"/>
      <trkpt lat="35.2335115" lon="23.6323831"/>
      <trkpt lat="35.23365" lon="23.6325978"/>
      <trkpt lat="35.233816" lon="23.6328891"/>
      <trkpt lat="35.2339115" lon="23.6332393"/>
      <trkpt lat="35.2338714" lon="23.6338497"/>
      <trkpt lat="35.233744" lon="23.6338634"/>
      <trkpt lat="35.2337753" lon="23.6340662"/>
      <trkpt lat="35.2338396" lon="23.6344609"/>
      <trkpt lat="35.2337758" lon="23.6349475"/>
      <trkpt lat="35.2335713" lon="23.6354526"/>
      <trkpt lat="35.2333303" lon="23.6358056"/>
      <trkpt lat="35.2326186" lon="23.6365586"/>
      <trkpt lat="35.2324075" lon="23.6367363"/>
      <trkpt lat="35.23266" lon="23.637279"/>
      <trkpt lat="35.2327433" lon="23.6372083"/>
      <trkpt lat="35.2328243" lon="23.6371091"/>
      <trkpt lat="35.2329322" lon="23.6369061"/>
      <trkpt lat="35.2330985" lon="23.6370209"/>
      <trkpt lat="35.2331508" lon="23.6369361"/>
      <trkpt lat="35.2331622" lon="23.6369161"/>
      <trkpt lat="35.2331798" lon="23.6368853"/>
      <trkpt lat="35.2331992" lon="23.6368509"/>
      <trkpt lat="35.2332472" lon="23.6367694"/>
      <trkpt lat="35.2332933" lon="23.636691"/>
      <trkpt lat="35.2333838" lon="23.6365699"/>
      <trkpt lat="35.2341019" lon="23.6354629"/>
      <trkpt lat="35.2340495" lon="23.6352735"/>
      <trkpt lat="35.2340909" lon="23.6348812"/>
      <trkpt lat="35.2342373" lon="23.6347088"/>
      <trkpt lat="35.2341876" lon="23.6341575"/>
      <trkpt lat="35.2340771" lon="23.6340256"/>
      <trkpt lat="35.2340384" lon="23.6332343"/>
      <trkpt lat="35.2339887" lon="23.6328488"/>
      <trkpt lat="35.2337125" lon="23.6322502"/>
      <trkpt lat="35.2330403" lon="23.6318352"/>
      <trkpt lat="35.2325009" lon="23.6323064"/>
    </trkseg>
  </trk>


https://goo.gl/maps/EpeuuqCZXxt4YurB7

andrzej627 - 2020-04-21, 09:36

wiesiek t napisał/a:
używacie Maps.Me

Z tego co wiem, to MAPS.ME jest chyba najpopularniejszą aplikacją używaną przez forumowiczów, dlatego o niej wspominam. Osobiście używam nawigacji Garmina (na zdjęciu z lewej strony), ale mam też 10-calowy tablet z aplikacją OsmAnd, która służy mi jako mapnik. Te aplikacje używają map offline, a więc nie potrzebują Internetu, aby z nich korzystać. To jest najważniejsza różnica w stosunku do Google Maps.

Dzięki za piwa.

andrzej627 - 2020-04-21, 11:52

Cytat:
Umiesz z tej listy wybrać lepiej?

Odpowiadam na moje pytanie. Aby było lepiej, tak jak jest na mapie dla Garmina, zamiast brać skrajny (pierwszy=ostatni) punkt, trzeba policzyć średnią wartość współrzędnych lat/lon i zamiast trk (z postu wyżej) wygenerować wpt jak poniżej.

Kod:
<wpt lat="35.23341" lon="23.63471">
    <name>Grammeno Beach</name>
    <desc>name=Grammeno Beach
natural=beach
surface=sand</desc>
    <link href="http://osm.org/browse/relation/537006"/>
  </wpt>


Plaża wychodzi wtedy, jak na mapie dla Garmina, w morzu. :mrgreen:

https://goo.gl/maps/v5mwPmH5SFckC9cS6

Spax - 2020-04-21, 11:55

Andrzej - na chybił-trafił 35.233816,23.6328891 A to dlatego, że widzę jak ta plaża wygląda.
Na OSM to wielokąt po ang. polygon. Podzieliłem wzrokowo Twój plik na m.n.w. 4 części i wybrałem. Niestety nie da się tego zrobić sposobem jakiego ty użyłeś nie znając kształtu i dokładnego położenia.
Biorąc pod uwagę złożoności terenu Grecji, tworzenie takich punktów na mapie (jak Twoja) może doprowadzić do tego, że Ty czekasz na kogoś za skałą, bo tak poprowadził cię GPS, a ktoś inny siedzi po drugiej stronie tejże skały bo jego GPS inaczej poprowadził. Pewnie to skrajne przypadki, ale warto jest mieć to na uwadze.

Tu masz narzędzie pod do dokładniejszego sprawdzania/edytowania co i jak i gdzie.

»»» https://portable.info.pl/gpsprune-portable/

Spax - 2020-04-21, 12:21

andrzej627 napisał/a:
Plaża wychodzi wtedy, jak na mapie dla Garmina, w morzu.

Nie jest źle - lepiej niż w górach :haha:

Spax - 2020-04-21, 12:26

wiesiek t, dzięki za piwko - dodam do tego co już Andrzej napisał.
Bardziej rozsądną aplikacją jest Osmand - przynajmniej nie śledzi naszych poczynań w odróżnieniu do Maps.me (pochodzi od googla grrr). Również jako nawigacja sprawdza się u mnie wyśmienicie. Trzeba się do wielu rzeczy przyzwyczaić (bo to kombajn), ale jak już złapiesz co i jak to nie ma lepszej.

Spax - 2020-04-22, 00:41

Ponieważ na OpenStreetMap źle była wyrysowana plaża, to dokonałem wiążących zmian na mapach OSM - dotyczy to wyłącznie plaży, o której była mowa w kilku poprzednich postach - zmniejszyłem ją o skały, na których chciał się opalać Andrzej. :diabelski_usmiech

Zmiany możecie zobaczyć tu: »»» KRETA - GRAMMENO BEACH

PS
Tak z nudów to robię, bo w zasadzie bez większego znaczenia dla turysty jest to, czy na mapie coś jest czy nie. Korzysta po prostu z lokalnej drogi dojazdowej na plażę, nie pierdzieląc się w jakieś GPS :haha:

ufolz - 2020-05-04, 17:23
Temat postu: Instrukcja - wydobywanie danych POI z map OpenStreetMap
Podpowiem że na platformie windows jest program Qgis gdzie można otwierać pliki, mapy wskazane przez Spax'a i wybierać sobie które nas interesują przez clasy i regóły wyświetlania Później zapisać SHP jako KML i w drogę :)
Spax byłeś dla mnie punktem zaczepienia aby drążyć temat innych państw. Udało się... :)
PIWKO :)

Spax - 2020-05-04, 22:09

ufolz napisał/a:
...aby drążyć temat innych państw. Udało się...


Fajnie - dzięki za piwko

ufolz napisał/a:
Podpowiem że na platformie windows jest program Qgis


Aaaaa - dawniej Quantum. Racja! Myślę, że Andrzejowi się spodoba. :bigok


Powered by phpBB modified by Przemo © 2003 phpBB Group