Wymyślone na szybko:
https://overpass-turbo.eu/s/Xrm
Nie wiem czy dokładnie o to Ci chodziło, ale opisałem kroki działania.
Wymyślone na szybko:
https://overpass-turbo.eu/s/Xrm
Nie wiem czy dokładnie o to Ci chodziło, ale opisałem kroki działania.
Potrzebuję pomocy, inspirowany Wiki tworzę skryptozakładkę (bookmarklet), która gdy jesteśmy na stronie z jakąś uwagą np. https://www.openstreetmap.org/note/2338496
otworzy nam w nowym oknie Overpass turbo i załaduje w tej pozycji dane OSM w stanie na moment utworzenia tej uwagi
(dla uwagi z linka powyżej: https://overpass-turbo.eu/s/XUA )
Kod działa gdy go wkleję do konsoli Firefoxa, ale nie umiem z niego zrobić skryptozakładki.
Jeśli ktoś się zastanawia dlaczego używam XHR do API OSM, to dlatego że data utworzenia uwagi na osm.org jest podana w języku użytkownika
javascript: (function() {
id = location.href.match(/www\.openstreetmap\.org\/note\/(\d+)/);
if (id != null) {
var req = new XMLHttpRequest();
req.open('GET', 'https://www.openstreetmap.org/api/0.6/notes/' + id[1] + '.json', false);
req.send(null);
var note = JSON.parse(req.responseText);
var date = new Date(note.properties.date_created.replace(' UTC', ''));
var lat = note.geometry.coordinates[1];
var lon = note.geometry.coordinates[0];
var zoom = 18;
var isoDate = date.toISOString();
var queryString = '[date:\"' + isoDate + '\"];\n(\n node({{bbox}});\n way({{bbox}});\n \/\/relation({{bbox}});\n);\r\nout meta;\n>;\nout meta qt;';
window.open('https://overpass-turbo.eu/?Q=' + escape(queryString) + '&C=' + lat + ';' + lon + ';' + zoom + '&R');
} else {
alert('This is not a valid OSM note page.')
}
})()
W Chromie działa?
Tak.
Wiem do czego zmierzasz - gdy strona przekazuje nagłówek strict CSP, to Firefox nie pozwala uruchamiać skryptozakładek. (wg https://wiki.openstreetmap.org/wiki/Bookmarklet - Chrome się nie przejmuje)
Z tym, że to nieprawda, bo podana na Wiki skryptozakładka Achavi działa w Firefoxie 80.0.1
(Przez jakiś czas w poprzednich wersjach rzeczywiście nie działała).
I mam tu zonka, bo jedyny request jaki robię, jest właśnie do openstreetmap.org. Overpass turbo otwieram w zupełnie nowej karcie.
Ogólnie w konsoli nie dzieje się zupełnie nic.
Edit: jakoś udało mi się sprawić, że działa
Firefox z jakiegoś powodu ignoruje wklejane do paska URL-e z javascript: .
Po skasowaniu nowych linii i spacji da się to dodać do zakładek.
javascript:(function(){id=location.href.match(/www\.openstreetmap\.org\/note\/(\d+)/);if(id!=null){var req=new XMLHttpRequest();req.open('GET','https://www.openstreetmap.org/api/0.6/notes/'+id[1]+'.json',false);req.send(null);var note=JSON.parse(req.responseText);var date=new Date(note.properties.date_created.replace(' UTC',''));var lat=note.geometry.coordinates[1];var lon=note.geometry.coordinates[0];var zoom=18;var isoDate=date.toISOString();var queryString='[date:\"'+isoDate+'\"];\n(\n node({{bbox}});\n way({{bbox}});\n \/\/relation({{bbox}});\n);\r\nout meta;\n>;\nout meta qt;';window.open('https://overpass-turbo.eu/?Q='+escape(queryString)+'&C='+lat+';'+lon+';'+zoom+'&R');}else{alert('This is not a valid OSM note page.')}})()
A oto kolejna wersja, która potrafi odczytać datę aktualizacji map z uwag robionych w MAPS.ME:
javascript: (function() {
var id = location.href.match(/www\.openstreetmap\.org\/note\/(\d+)/);
if (id != null) {
var req = new XMLHttpRequest();
req.open('GET', 'https://www.openstreetmap.org/api/0.6/notes/' + id[1] + '.json', false);
req.send(null);
var note = JSON.parse(req.responseText);
var date = new Date(note.properties.date_created.replace(' UTC', ''));
var lat = note.geometry.coordinates[1];
var lon = note.geometry.coordinates[0];
var zoom = 18;
var isoDate = date.toISOString();
var noteText = note.properties.comments[0].text;
var osmDataVersion = noteText.match(/OSM data version\: ([\d]{4}-[\d]{2}-[\d]{2}T[\d]{2}\:[\d]{2}\:[\d]{2}\Z)/);
if (osmDataVersion != null) {
isoDate = osmDataVersion[1];
}
var queryString = '[date:\"' + isoDate + '\"];\n(\n node({{bbox}});\n way({{bbox}});\n \/\/relation({{bbox}});\n);\r\nout meta;\n>;\nout meta qt;';
window.open('https://overpass-turbo.eu/?Q=' + escape(queryString) + '&C=' + lat + ';' + lon + ';' + zoom + '&R');
} else {
alert('This is not a valid OSM note page.')
}
})()
I po zmniejszeniu:
javascript:(function(){var id=location.href.match(/www\.openstreetmap\.org\/note\/(\d+)/);if(id!=null){var req=new XMLHttpRequest;req.open("GET","https://www.openstreetmap.org/api/0.6/notes/"+id[1]+".json",false);req.send(null);var note=JSON.parse(req.responseText);var date=new Date(note.properties.date_created.replace(" UTC",""));var lat=note.geometry.coordinates[1];var lon=note.geometry.coordinates[0];var zoom=18;var isoDate=date.toISOString();var noteText=note.properties.comments[0].text;var osmDataVersion=noteText.match(/OSM data version\: ([\d]{4}-[\d]{2}-[\d]{2}T[\d]{2}\:[\d]{2}\:[\d]{2}\Z)/);if(osmDataVersion!=null){isoDate=osmDataVersion[1]}var queryString='[date:"'+isoDate+'"];\n(\n node({{bbox}});\n way({{bbox}});\n //relation({{bbox}});\n);\r\nout meta;\n>;\nout meta qt;';window.open("https://overpass-turbo.eu/?Q="+escape(queryString)+"&C="+lat+";"+lon+";"+zoom+"&R")}else{alert("This is not a valid OSM note page.")}})();
Czy da się w overpass w {{geocodeArea:Kraków}} wpisać dwa miasta/regiony? Np. jeśli chciałbym jednocześnie Kraków i Poznań?
Można na pewno skleić dwa zapytania (daj znać jeśli pomocy tu potrzebujesz), ale nie potrafię tego zrobić w jednym geocodeArea .
Jak skleić? Wkleić jedno pod drugim? Bo chciałbym, żeby nie trzeba było osobno uruchamiać dwóch zapytań.
Możesz. Grupujesz obszary w dodatkowe nawiasy:
(
{{geocodeArea:Poznań}};
{{geocodeArea:Kraków}};
)->.searchArea;
a potem resztę wykonujesz tak samo używając (area.searchArea).
Możesz też zawęzić do mniejszych obszarów, jak nie interesuje cię cało miasto. Ja często korzystam z kluczy/wartości teryt:simc np. do wybrania poszczególnych dzielnic Warszawy.
[out:json];
(
area["teryt:simc"="0919884"]; // Wola
area["teryt:simc"="0918643"]; // Ochota
area["teryt:simc"="0918130"]; // Mokotów
)->.a;
Dzięki!
A co zrobić, gdy nazwa nie jest unikalna, jak np. “Stare Miasto”, “Nowa Wieś” i może być wiele obiektów o takiej samej nazwie.
Da się jakoś wpisać ID linii z OSM?
Np. po wpisaniu {{geocodeArea:Stare Miasto}} znajduje obiekty w… Jerozolimie;)
Obejrzyj drugi z podanych przykładów
Nie każdy obiekt ma tag “teryt:simc”. Chodziło mi o numer “way” w OSM.
Stare Miasto we Wrocławiu i Poznaniu:
area(id:3602341619,3601849136)->.searchArea;
id są powiększone o 3600000000, bo to relacje. Dla linii należy powiększyć o 2400000000.
Mógłby ktoś pomóc ?
Potrzebuję wyciągnąć z bazy te drogi unclassified i residental dla których surface nie ma wartości.
Drugi temat to drogi dla których surface=xxx (coś sobie podstawię)
Z góry dzięki.
http://overpass-turbo.eu/s/123o
http://overpass-turbo.eu/s/123p
dla innych nawierzchni podmieniasz [“surface”=“gravel”] na [“surface”=“xxx”]
niestety pierwsza kwerenda zwraca tylko drogi unclassified, nie działa dla residental
W pierwszej kwerendzie była literówka - zamiast ‘residential’ było wpisane ‘residental’. Poniżej poprawiona kwerenda:
http://overpass-turbo.eu/s/12gX
dzięki
Opcjonalnie, po małej optymalizacji - 2w1: https://overpass-turbo.eu/s/12hz
Dla poprawnego działania jedna z opcji powinna być ‘zakomentowana’.
Ciekawostka dla użytkowników overpass.
Można uprościć algorytm wyszukiwania i zamiast 3 linii:
(
node["amenity"="pharmacy"]({{bbox}});
way["amenity"="pharmacy"]({{bbox}});
relation["amenity"="pharmacy"]({{bbox}});
);
użyć jednej:
(
nwr["amenity"="pharmacy"]({{bbox}});
);