Übersicht
- DarkViperAU Ramble Liste
- Dönerfinder
- Dokuwiki "Druckansicht" Bookmark-Applet
- DriveUsageAnalyser
- OpenStreetMap-Linkliste
- OSM-Staticmaps
- OඞM
- Parking Studio
- StreetComplete-Statistiken
- StreetCompleteNess
- StreetCompleteNumbers
- TUC Mensa Bot
- Status-Saver für WhatsApp
- WhatsAppToJSON
- YouTube-Annotation-Archive
Hey, ich bin Wieland! Hier sind ein paar meiner Projekte:
DarkViperAU Ramble Liste↑
Ich mag den Streamer und YouTuber DarkViperAU ziemlich gerne. Während seiner Streams redet er oft vor sich hin und erzählt von bestimmten Themen, die ihn gerade bewegen. Diese Schnipsel schneidet er zusammen und stellt sie auf YouTube als "rambles" (dt. "Brabbelleien") in einem Podcast-Ähnlichen Format zur Verfügung. Ich habe eine Website gemacht, auf der man alle seine Rambles durchsuchen und nachlesen oder nachhören kann.
Ihr könnt sie hier finden.
(Permalink/einzelne Projektseite)
Dönerfinder↑
Weil ich mit dem Verwenden von OSM-Daten experimentieren wollte, habe ich im Sommer 2020 angefangen, eine App zu entwickeln, mit der man für jede Stadt eine Liste der Dönerläden, die es dort gibt ansehen kann. Die App hat zwei besondere Features:
- Sie funktioniert komplett offline, sobald die Daten einmal abgerufen wurden
- Sie funktioniert komplett ohne Standortberechtigungen zu verlangen
Die App bietet die Möglichkeit, die Dönerbuden in der Stadt nach bestimmten Eigenschaften zu filtern. Zum Beispiel, ob Lieferung angeboten wird, oder ob es dort vegetarischen Döner gibt.
Die App ist relativ redundant, da man ja auch einfach Google nach Dönerbuden in der Nähe fragen kann, aber für den Fall, dass jemand einen Verwendungszweck für diese App sieht, habe ich sie in den Play Store gestellt:
(Permalink/einzelne Projektseite)
Dokuwiki "Druckansicht" Bookmark-Applet↑
Manchmal kommt es vor, dass man einen Ausdruck einer Seite eines DokuWikis braucht. Doch da sind immer die störenden Seitenleisten, Header und Footer. Deswegen habe ich ein kleines Scriptlet gebaut, dass eine DokuWiki-Seite in eine Druckansicht überführt.
Hier ist der Code dieses Bookmarklets:
javascript:(
function()
{
var elem = document.getElementById("dokuwiki__aside");
elem.remove();
var bryd = document.getElementsByClassName("pad group");
bryd[1].style.marginLeft = "0em";
var foot = document.getElementById("dokuwiki__footer");
foot.remove();
var head = document.getElementById("dokuwiki__header");
head.remove();
}
)();
(Permalink/einzelne Projektseite)
DriveUsageAnalyser↑
Manchmal kommt es bei mir (und sicher auch bei euch) vor, dass ihr euch denkt: 79 GB von 80 GB belegt!? Aber wo!? Na klar, man könnte bei jedem Ordner auf Eigenschaften rechtsklicken, um die größe des Ordners zu sehen und so Stück für Stück herausfinden, wo der Hund begraben ist. Oder man benutzt einfach den DriveUsageAnalyser, den ich für diesen Zweck geschrieben habe. Er zeigt euch nicht nur die Größe jedes Ordners im aktuellen Ordner an, sondern auch, wie viel Prozent des gesamten verbrauchten Speicherplatzes dieser einnimmt.
(Permalink/einzelne Projektseite)
OpenStreetMap-Linkliste↑
Hier eine Sammlung nützlicher OpenStreetMap-Projekte von anderen, die ich über die Zeit gesammelt habe:
- Eine Seite, auf der man seine eigenen OpenStreetMap-Notizen einsehen kann
- Sehr nützlich, wenn man oft für sich selbst Notizen macht und beim abarbeiten keine übersehen möchte
- Ein UserScript von kmpoppe, dass osm.org um neue Buttons erweitert
- Eine Website, auf der man
destination
-Relationen auswerten und aus den Daten die Richtungsschilder generieren kann - Eine Seite mit interessanten OpenStreetMap/StreetComplete-Statistiken
- Ein Tool, mit dem man
wikidata
-Tags zu OSM hinzufügen kann - Eine Website, mit der man einfach Busrouten-Relationen bearbeiten kann
(Permalink/einzelne Projektseite)
OSM-Staticmaps↑
Ich hoste hier auf haukauntrie.de eine modifizierte Version von staticMapLite, womit sich statische Ansichten von OpenStreetMap-Karten generieren lassen. Diese können einfach mit einer URL angefragt werden. Bedeutet: Überall, wo ein Bild von einer URL eingebettet werden kann, kann ein immer aktuelles Bild von einer Kartenansicht eingebettet werden.
Original-Version und Änderungen
Das Projekt basiert auf "StaticMapLite" von dfacts. Ich habe das Skript noch mit ein paar Änderungen ausgestattet.
- Ich habe weitere Tile-Server hinzugefügt und einen alten, der nicht mehr funktionierte ausgetauscht.
- Ich habe zusätzliche Icons von Kenney eingefügt.
- Das Ursprüngliche Logo wurde durch einen Copyrightvermerk ersetzt, und die Möglichkeit zum entfernen geschaffen
- Parameter können auch via POST übergeben werden, um auch viele Marker einfügen zu können
Dokumentation
Der Basis-Endpunkt, an den die GET-Parameter angehangen werden, ist https://haukauntrie.de/online/api/staticmaps/staticmap.php
.
GET-Parameter übersicht
Parameter | Beschreibung | Beispiel |
---|---|---|
center |
Das Zentrum der Kartenansicht | center=52.51621,13.37842 |
zoom |
Die Zoomstufe (1 bis 19) | zoom=14 |
size |
Die Größe des Bildes, in Breite xHöhe . Das maximum ist 4000. |
size=865x512 |
maptype |
Der Kartentyp. Es gibt mapnik , mapnikde und humaniterarian . |
maptype=mapnik |
nocopy |
Diesen Parameter kann man auf 1 setzen, damit der Copyright-Verweis nicht eingeblendet wird. Dies sollte man nur tun, wenn man die API für ein privates Projekt verwendet. Ein Bild ohne Copyright-Vermerk öffentlich zu zeigen, stellt eine Urheberrechtsverletzung dar. | nocopy=0 |
markers |
Hier kann man Marker übergeben, die an den entsprechenden Stellen hingerendert werden. Die Liste wird mit | getrennt, jedes Element der Liste besteht aus lat,lon,marker . Die verfügbaren Marker sind lightblue1 bis lightblue5 , emote_1 bis emote_91 , [small]_arrow_0_white bis [small]_arrow_359_white , bullseye , (ltblu|pink|purple|red|ylw)-pushpin , ol-marker , ol-marker-blue , ol-marker-gold , ol-marker-green |
markers=40.70,-74.015,lightblue1 |
Beispiel
Das ist das Bild, dass man durch den Aufruf von https://haukauntrie.de/online/api/staticmaps/staticmap.php?center=52.51621,13.37842&zoom=18&size=1080x512&maptype=mapnikde&markers=52.51682,13.37944,lightblue1
erhalten würde:
Und hier eines, dass man durch Aufruf von https://haukauntrie.de/online/api/staticmaps/staticmap.php?center=50.814155,12.930012&zoom=18&size=840x512&maptype=mapnikde&markers=50.814360,12.931163,emote_53|50.814899,12.930728,emote_46|50.813529,12.929200,emote_51|50.814519,12.929167,small_arrow_270_white
erhält.
Icons
Hier ist eine Tabelle mit allen Icons zur Übersicht:
arrow_0_white | |
arrow_100_white | |
arrow_101_white | |
arrow_102_white | |
arrow_103_white | |
arrow_104_white | |
arrow_105_white | |
arrow_106_white | |
arrow_107_white | |
arrow_108_white | |
arrow_109_white | |
arrow_10_white | |
arrow_110_white | |
arrow_111_white | |
arrow_112_white | |
arrow_113_white | |
arrow_114_white | |
arrow_115_white | |
arrow_116_white | |
arrow_117_white | |
arrow_118_white | |
arrow_119_white | |
arrow_11_white | |
arrow_120_white | |
arrow_121_white | |
arrow_122_white | |
arrow_123_white | |
arrow_124_white | |
arrow_125_white | |
arrow_126_white | |
arrow_127_white | |
arrow_128_white | |
arrow_129_white | |
arrow_12_white | |
arrow_130_white | |
arrow_131_white | |
arrow_132_white | |
arrow_133_white | |
arrow_134_white | |
arrow_135_white | |
arrow_136_white | |
arrow_137_white | |
arrow_138_white | |
arrow_139_white | |
arrow_13_white | |
arrow_140_white | |
arrow_141_white | |
arrow_142_white | |
arrow_143_white | |
arrow_144_white | |
arrow_145_white | |
arrow_146_white | |
arrow_147_white | |
arrow_148_white | |
arrow_149_white | |
arrow_14_white | |
arrow_150_white | |
arrow_151_white | |
arrow_152_white | |
arrow_153_white | |
arrow_154_white | |
arrow_155_white | |
arrow_156_white | |
arrow_157_white | |
arrow_158_white | |
arrow_159_white | |
arrow_15_white | |
arrow_160_white | |
arrow_161_white | |
arrow_162_white | |
arrow_163_white | |
arrow_164_white | |
arrow_165_white | |
arrow_166_white | |
arrow_167_white | |
arrow_168_white | |
arrow_169_white | |
arrow_16_white | |
arrow_170_white | |
arrow_171_white | |
arrow_172_white | |
arrow_173_white | |
arrow_174_white | |
arrow_175_white | |
arrow_176_white | |
arrow_177_white | |
arrow_178_white | |
arrow_179_white | |
arrow_17_white | |
arrow_180_white | |
arrow_181_white | |
arrow_182_white | |
arrow_183_white | |
arrow_184_white | |
arrow_185_white | |
arrow_186_white | |
arrow_187_white | |
arrow_188_white | |
arrow_189_white | |
arrow_18_white | |
arrow_190_white | |
arrow_191_white | |
arrow_192_white | |
arrow_193_white | |
arrow_194_white | |
arrow_195_white | |
arrow_196_white | |
arrow_197_white | |
arrow_198_white | |
arrow_199_white | |
arrow_19_white | |
arrow_1_white | |
arrow_200_white | |
arrow_201_white | |
arrow_202_white | |
arrow_203_white | |
arrow_204_white | |
arrow_205_white | |
arrow_206_white | |
arrow_207_white | |
arrow_208_white | |
arrow_209_white | |
arrow_20_white | |
arrow_210_white | |
arrow_211_white | |
arrow_212_white | |
arrow_213_white | |
arrow_214_white | |
arrow_215_white | |
arrow_216_white | |
arrow_217_white | |
arrow_218_white | |
arrow_219_white | |
arrow_21_white | |
arrow_220_white | |
arrow_221_white | |
arrow_222_white | |
arrow_223_white | |
arrow_224_white | |
arrow_225_white | |
arrow_226_white | |
arrow_227_white | |
arrow_228_white | |
arrow_229_white | |
arrow_22_white | |
arrow_230_white | |
arrow_231_white | |
arrow_232_white | |
arrow_233_white | |
arrow_234_white | |
arrow_235_white | |
arrow_236_white | |
arrow_237_white | |
arrow_238_white | |
arrow_239_white | |
arrow_23_white | |
arrow_240_white | |
arrow_241_white | |
arrow_242_white | |
arrow_243_white | |
arrow_244_white | |
arrow_245_white | |
arrow_246_white | |
arrow_247_white | |
arrow_248_white | |
arrow_249_white | |
arrow_24_white | |
arrow_250_white | |
arrow_251_white | |
arrow_252_white | |
arrow_253_white | |
arrow_254_white | |
arrow_255_white | |
arrow_256_white | |
arrow_257_white | |
arrow_258_white | |
arrow_259_white | |
arrow_25_white | |
arrow_260_white | |
arrow_261_white | |
arrow_262_white | |
arrow_263_white | |
arrow_264_white | |
arrow_265_white | |
arrow_266_white | |
arrow_267_white | |
arrow_268_white | |
arrow_269_white | |
arrow_26_white | |
arrow_270_white | |
arrow_271_white | |
arrow_272_white | |
arrow_273_white | |
arrow_274_white | |
arrow_275_white | |
arrow_276_white | |
arrow_277_white | |
arrow_278_white | |
arrow_279_white | |
arrow_27_white | |
arrow_280_white | |
arrow_281_white | |
arrow_282_white | |
arrow_283_white | |
arrow_284_white | |
arrow_285_white | |
arrow_286_white | |
arrow_287_white | |
arrow_288_white | |
arrow_289_white | |
arrow_28_white | |
arrow_290_white | |
arrow_291_white | |
arrow_292_white | |
arrow_293_white | |
arrow_294_white | |
arrow_295_white | |
arrow_296_white | |
arrow_297_white | |
arrow_298_white | |
arrow_299_white | |
arrow_29_white | |
arrow_2_white | |
arrow_300_white | |
arrow_301_white | |
arrow_302_white | |
arrow_303_white | |
arrow_304_white | |
arrow_305_white | |
arrow_306_white | |
arrow_307_white | |
arrow_308_white | |
arrow_309_white | |
arrow_30_white | |
arrow_310_white | |
arrow_311_white | |
arrow_312_white | |
arrow_313_white | |
arrow_314_white | |
arrow_315_white | |
arrow_316_white | |
arrow_317_white | |
arrow_318_white | |
arrow_319_white | |
arrow_31_white | |
arrow_320_white | |
arrow_321_white | |
arrow_322_white | |
arrow_323_white | |
arrow_324_white | |
arrow_325_white | |
arrow_326_white | |
arrow_327_white | |
arrow_328_white | |
arrow_329_white | |
arrow_32_white | |
arrow_330_white | |
arrow_331_white | |
arrow_332_white | |
arrow_333_white | |
arrow_334_white | |
arrow_335_white | |
arrow_336_white | |
arrow_337_white | |
arrow_338_white | |
arrow_339_white | |
arrow_33_white | |
arrow_340_white | |
arrow_341_white | |
arrow_342_white | |
arrow_343_white | |
arrow_344_white | |
arrow_345_white | |
arrow_346_white | |
arrow_347_white | |
arrow_348_white | |
arrow_349_white | |
arrow_34_white | |
arrow_350_white | |
arrow_351_white | |
arrow_352_white | |
arrow_353_white | |
arrow_354_white | |
arrow_355_white | |
arrow_356_white | |
arrow_357_white | |
arrow_358_white | |
arrow_359_white | |
arrow_35_white | |
arrow_36_white | |
arrow_37_white | |
arrow_38_white | |
arrow_39_white | |
arrow_3_white | |
arrow_40_white | |
arrow_41_white | |
arrow_42_white | |
arrow_43_white | |
arrow_44_white | |
arrow_45_white | |
arrow_46_white | |
arrow_47_white | |
arrow_48_white | |
arrow_49_white | |
arrow_4_white | |
arrow_50_white | |
arrow_51_white | |
arrow_52_white | |
arrow_53_white | |
arrow_54_white | |
arrow_55_white | |
arrow_56_white | |
arrow_57_white | |
arrow_58_white | |
arrow_59_white | |
arrow_5_white | |
arrow_60_white | |
arrow_61_white | |
arrow_62_white | |
arrow_63_white | |
arrow_64_white | |
arrow_65_white | |
arrow_66_white | |
arrow_67_white | |
arrow_68_white | |
arrow_69_white | |
arrow_6_white | |
arrow_70_white | |
arrow_71_white | |
arrow_72_white | |
arrow_73_white | |
arrow_74_white | |
arrow_75_white | |
arrow_76_white | |
arrow_77_white | |
arrow_78_white | |
arrow_79_white | |
arrow_7_white | |
arrow_80_white | |
arrow_81_white | |
arrow_82_white | |
arrow_83_white | |
arrow_84_white | |
arrow_85_white | |
arrow_86_white | |
arrow_87_white | |
arrow_88_white | |
arrow_89_white | |
arrow_8_white | |
arrow_90_white | |
arrow_91_white | |
arrow_92_white | |
arrow_93_white | |
arrow_94_white | |
arrow_95_white | |
arrow_96_white | |
arrow_97_white | |
arrow_98_white | |
arrow_99_white | |
arrow_9_white | |
arrow_E_white | |
arrow_NE_white | |
arrow_NW_white | |
arrow_N_white | |
arrow_SE_white | |
arrow_SW_white | |
arrow_S_white | |
arrow_W_white | |
bullseye | |
emote_0 | |
emote_1 | |
emote_10 | |
emote_11 | |
emote_12 | |
emote_13 | |
emote_14 | |
emote_15 | |
emote_16 | |
emote_17 | |
emote_18 | |
emote_19 | |
emote_2 | |
emote_20 | |
emote_21 | |
emote_22 | |
emote_23 | |
emote_24 | |
emote_25 | |
emote_26 | |
emote_27 | |
emote_28 | |
emote_29 | |
emote_3 | |
emote_30 | |
emote_31 | |
emote_32 | |
emote_33 | |
emote_34 | |
emote_35 | |
emote_36 | |
emote_37 | |
emote_38 | |
emote_39 | |
emote_4 | |
emote_40 | |
emote_41 | |
emote_42 | |
emote_43 | |
emote_44 | |
emote_45 | |
emote_46 | |
emote_47 | |
emote_48 | |
emote_49 | |
emote_5 | |
emote_50 | |
emote_51 | |
emote_52 | |
emote_53 | |
emote_54 | |
emote_55 | |
emote_56 | |
emote_57 | |
emote_58 | |
emote_59 | |
emote_6 | |
emote_60 | |
emote_61 | |
emote_62 | |
emote_63 | |
emote_64 | |
emote_65 | |
emote_66 | |
emote_67 | |
emote_68 | |
emote_69 | |
emote_7 | |
emote_70 | |
emote_71 | |
emote_72 | |
emote_73 | |
emote_74 | |
emote_75 | |
emote_76 | |
emote_78 | |
emote_79 | |
emote_8 | |
emote_80 | |
emote_81 | |
emote_82 | |
emote_83 | |
emote_84 | |
emote_85 | |
emote_86 | |
emote_87 | |
emote_88 | |
emote_89 | |
emote_9 | |
emote_90 | |
emote_91 | |
icon_crossLarge | |
icon_crossSmall | |
icon_exclamationLarge | |
icon_exclamationSmall | |
icon_plusLarge | |
icon_plusSmall | |
lightblue1 | |
lightblue2 | |
lightblue3 | |
lightblue4 | |
lightblue5 | |
ltblu-pushpin | |
ol-marker-blue | |
ol-marker-gold | |
ol-marker-green | |
ol-marker | |
pink-pushpin | |
purple-pushpin | |
red-pushpin | |
small_arrow_0_white | |
small_arrow_100_white | |
small_arrow_101_white | |
small_arrow_102_white | |
small_arrow_103_white | |
small_arrow_104_white | |
small_arrow_105_white | |
small_arrow_106_white | |
small_arrow_107_white | |
small_arrow_108_white | |
small_arrow_109_white | |
small_arrow_10_white | |
small_arrow_110_white | |
small_arrow_111_white | |
small_arrow_112_white | |
small_arrow_113_white | |
small_arrow_114_white | |
small_arrow_115_white | |
small_arrow_116_white | |
small_arrow_117_white | |
small_arrow_118_white | |
small_arrow_119_white | |
small_arrow_11_white | |
small_arrow_120_white | |
small_arrow_121_white | |
small_arrow_122_white | |
small_arrow_123_white | |
small_arrow_124_white | |
small_arrow_125_white | |
small_arrow_126_white | |
small_arrow_127_white | |
small_arrow_128_white | |
small_arrow_129_white | |
small_arrow_12_white | |
small_arrow_130_white | |
small_arrow_131_white | |
small_arrow_132_white | |
small_arrow_133_white | |
small_arrow_134_white | |
small_arrow_135_white | |
small_arrow_136_white | |
small_arrow_137_white | |
small_arrow_138_white | |
small_arrow_139_white | |
small_arrow_13_white | |
small_arrow_140_white | |
small_arrow_141_white | |
small_arrow_142_white | |
small_arrow_143_white | |
small_arrow_144_white | |
small_arrow_145_white | |
small_arrow_146_white | |
small_arrow_147_white | |
small_arrow_148_white | |
small_arrow_149_white | |
small_arrow_14_white | |
small_arrow_150_white | |
small_arrow_151_white | |
small_arrow_152_white | |
small_arrow_153_white | |
small_arrow_154_white | |
small_arrow_155_white | |
small_arrow_156_white | |
small_arrow_157_white | |
small_arrow_158_white | |
small_arrow_159_white | |
small_arrow_15_white | |
small_arrow_160_white | |
small_arrow_161_white | |
small_arrow_162_white | |
small_arrow_163_white | |
small_arrow_164_white | |
small_arrow_165_white | |
small_arrow_166_white | |
small_arrow_167_white | |
small_arrow_168_white | |
small_arrow_169_white | |
small_arrow_16_white | |
small_arrow_170_white | |
small_arrow_171_white | |
small_arrow_172_white | |
small_arrow_173_white | |
small_arrow_174_white | |
small_arrow_175_white | |
small_arrow_176_white | |
small_arrow_177_white | |
small_arrow_178_white | |
small_arrow_179_white | |
small_arrow_17_white | |
small_arrow_180_white | |
small_arrow_181_white | |
small_arrow_182_white | |
small_arrow_183_white | |
small_arrow_184_white | |
small_arrow_185_white | |
small_arrow_186_white | |
small_arrow_187_white | |
small_arrow_188_white | |
small_arrow_189_white | |
small_arrow_18_white | |
small_arrow_190_white | |
small_arrow_191_white | |
small_arrow_192_white | |
small_arrow_193_white | |
small_arrow_194_white | |
small_arrow_195_white | |
small_arrow_196_white | |
small_arrow_197_white | |
small_arrow_198_white | |
small_arrow_199_white | |
small_arrow_19_white | |
small_arrow_1_white | |
small_arrow_200_white | |
small_arrow_201_white | |
small_arrow_202_white | |
small_arrow_203_white | |
small_arrow_204_white | |
small_arrow_205_white | |
small_arrow_206_white | |
small_arrow_207_white | |
small_arrow_208_white | |
small_arrow_209_white | |
small_arrow_20_white | |
small_arrow_210_white | |
small_arrow_211_white | |
small_arrow_212_white | |
small_arrow_213_white | |
small_arrow_214_white | |
small_arrow_215_white | |
small_arrow_216_white | |
small_arrow_217_white | |
small_arrow_218_white | |
small_arrow_219_white | |
small_arrow_21_white | |
small_arrow_220_white | |
small_arrow_221_white | |
small_arrow_222_white | |
small_arrow_223_white | |
small_arrow_224_white | |
small_arrow_225_white | |
small_arrow_226_white | |
small_arrow_227_white | |
small_arrow_228_white | |
small_arrow_229_white | |
small_arrow_22_white | |
small_arrow_230_white | |
small_arrow_231_white | |
small_arrow_232_white | |
small_arrow_233_white | |
small_arrow_234_white | |
small_arrow_235_white | |
small_arrow_236_white | |
small_arrow_237_white | |
small_arrow_238_white | |
small_arrow_239_white | |
small_arrow_23_white | |
small_arrow_240_white | |
small_arrow_241_white | |
small_arrow_242_white | |
small_arrow_243_white | |
small_arrow_244_white | |
small_arrow_245_white | |
small_arrow_246_white | |
small_arrow_247_white | |
small_arrow_248_white | |
small_arrow_249_white | |
small_arrow_24_white | |
small_arrow_250_white | |
small_arrow_251_white | |
small_arrow_252_white | |
small_arrow_253_white | |
small_arrow_254_white | |
small_arrow_255_white | |
small_arrow_256_white | |
small_arrow_257_white | |
small_arrow_258_white | |
small_arrow_259_white | |
small_arrow_25_white | |
small_arrow_260_white | |
small_arrow_261_white | |
small_arrow_262_white | |
small_arrow_263_white | |
small_arrow_264_white | |
small_arrow_265_white | |
small_arrow_266_white | |
small_arrow_267_white | |
small_arrow_268_white | |
small_arrow_269_white | |
small_arrow_26_white | |
small_arrow_270_white | |
small_arrow_271_white | |
small_arrow_272_white | |
small_arrow_273_white | |
small_arrow_274_white | |
small_arrow_275_white | |
small_arrow_276_white | |
small_arrow_277_white | |
small_arrow_278_white | |
small_arrow_279_white | |
small_arrow_27_white | |
small_arrow_280_white | |
small_arrow_281_white | |
small_arrow_282_white | |
small_arrow_283_white | |
small_arrow_284_white | |
small_arrow_285_white | |
small_arrow_286_white | |
small_arrow_287_white | |
small_arrow_288_white | |
small_arrow_289_white | |
small_arrow_28_white | |
small_arrow_290_white | |
small_arrow_291_white | |
small_arrow_292_white | |
small_arrow_293_white | |
small_arrow_294_white | |
small_arrow_295_white | |
small_arrow_296_white | |
small_arrow_297_white | |
small_arrow_298_white | |
small_arrow_299_white | |
small_arrow_29_white | |
small_arrow_2_white | |
small_arrow_300_white | |
small_arrow_301_white | |
small_arrow_302_white | |
small_arrow_303_white | |
small_arrow_304_white | |
small_arrow_305_white | |
small_arrow_306_white | |
small_arrow_307_white | |
small_arrow_308_white | |
small_arrow_309_white | |
small_arrow_30_white | |
small_arrow_310_white | |
small_arrow_311_white | |
small_arrow_312_white | |
small_arrow_313_white | |
small_arrow_314_white | |
small_arrow_315_white | |
small_arrow_316_white | |
small_arrow_317_white | |
small_arrow_318_white | |
small_arrow_319_white | |
small_arrow_31_white | |
small_arrow_320_white | |
small_arrow_321_white | |
small_arrow_322_white | |
small_arrow_323_white | |
small_arrow_324_white | |
small_arrow_325_white | |
small_arrow_326_white | |
small_arrow_327_white | |
small_arrow_328_white | |
small_arrow_329_white | |
small_arrow_32_white | |
small_arrow_330_white | |
small_arrow_331_white | |
small_arrow_332_white | |
small_arrow_333_white | |
small_arrow_334_white | |
small_arrow_335_white | |
small_arrow_336_white | |
small_arrow_337_white | |
small_arrow_338_white | |
small_arrow_339_white | |
small_arrow_33_white | |
small_arrow_340_white | |
small_arrow_341_white | |
small_arrow_342_white | |
small_arrow_343_white | |
small_arrow_344_white | |
small_arrow_345_white | |
small_arrow_346_white | |
small_arrow_347_white | |
small_arrow_348_white | |
small_arrow_349_white | |
small_arrow_34_white | |
small_arrow_350_white | |
small_arrow_351_white | |
small_arrow_352_white | |
small_arrow_353_white | |
small_arrow_354_white | |
small_arrow_355_white | |
small_arrow_356_white | |
small_arrow_357_white | |
small_arrow_358_white | |
small_arrow_359_white | |
small_arrow_35_white | |
small_arrow_36_white | |
small_arrow_37_white | |
small_arrow_38_white | |
small_arrow_39_white | |
small_arrow_3_white | |
small_arrow_40_white | |
small_arrow_41_white | |
small_arrow_42_white | |
small_arrow_43_white | |
small_arrow_44_white | |
small_arrow_45_white | |
small_arrow_46_white | |
small_arrow_47_white | |
small_arrow_48_white | |
small_arrow_49_white | |
small_arrow_4_white | |
small_arrow_50_white | |
small_arrow_51_white | |
small_arrow_52_white | |
small_arrow_53_white | |
small_arrow_54_white | |
small_arrow_55_white | |
small_arrow_56_white | |
small_arrow_57_white | |
small_arrow_58_white | |
small_arrow_59_white | |
small_arrow_5_white | |
small_arrow_60_white | |
small_arrow_61_white | |
small_arrow_62_white | |
small_arrow_63_white | |
small_arrow_64_white | |
small_arrow_65_white | |
small_arrow_66_white | |
small_arrow_67_white | |
small_arrow_68_white | |
small_arrow_69_white | |
small_arrow_6_white | |
small_arrow_70_white | |
small_arrow_71_white | |
small_arrow_72_white | |
small_arrow_73_white | |
small_arrow_74_white | |
small_arrow_75_white | |
small_arrow_76_white | |
small_arrow_77_white | |
small_arrow_78_white | |
small_arrow_79_white | |
small_arrow_7_white | |
small_arrow_80_white | |
small_arrow_81_white | |
small_arrow_82_white | |
small_arrow_83_white | |
small_arrow_84_white | |
small_arrow_85_white | |
small_arrow_86_white | |
small_arrow_87_white | |
small_arrow_88_white | |
small_arrow_89_white | |
small_arrow_8_white | |
small_arrow_90_white | |
small_arrow_91_white | |
small_arrow_92_white | |
small_arrow_93_white | |
small_arrow_94_white | |
small_arrow_95_white | |
small_arrow_96_white | |
small_arrow_97_white | |
small_arrow_98_white | |
small_arrow_99_white | |
small_arrow_9_white | |
star_small | |
star_small_blue | |
star_small_blue_1x | |
star_small_red | |
star_small_red_1x | |
star_small_white | |
star_tiny | |
star_tiny_blue | |
star_tiny_blue_1x | |
star_tiny_red | |
star_tiny_red_1x | |
star_tiny_white | |
ylw-pushpin | |
(Permalink/einzelne Projektseite)
OඞM↑
OඞM (ausgesprochen: Oh-sass-emm) ist ein kleines QA-Tool für OpenStreetMap, das ich hauptsächlich für mich selbst geschrieben habe. Es findet "suspekte" OpenStreetMap-Elemente, bei denen sehr wahrscheinlich was faul ist, und deswegen mit relativ wenig nachdenken das Problem gelöst werden könnte. Aber Rot ist halt nicht immer der Imposter und deswegen braucht jedes Objekt eine manuelle Prüfung.
Ein Pythonskript geht mithilfe von pyosmium die sachsen-latest.osm.pbf
-Datei durch und wendet verschiedene pyosmium-Handler auf sie an. Ein Handler pro Quest.
Schlägt ein Handler an, wird das betreffende Objekt zu einer json-Datei hinzugefügt, zusammen mit mit einer kurzen Beschreibung des Problems und einem ID-Editor-Link und einem Bild-Link für meinen StaticMap-Dienst.
Die Website zeigt diese Liste dann einfach zufällig an. Es soll so ein bisschen einen "Grabbelkisten-Vibe" haben. Es gibt keine Möglichkeit, ein Problem als gelöst oder als falsch-positiv zu markieren.
Liste der derzeitigen Aufgaben
- Ein Objekt ist
amenity=fast_food
und der Name enthältDöner
, abercuisine!~kebab
- Ein Objekt ist
amenity=fast_food
und der Name enthältPizza
, abercuisine!~pizza
- Ein Objekt verwendet das veraltete Tagging
amenity=nursing_home
- Ein Objekt hat "Behin" und "Werkstatt" im Namen, aber
social_facility
existiert nicht oder ist nichtworkshop
- Ein
website=*
-Tag einer Website gibt keinen HTTP 200 zurück
(Hier fehlt noch der GitHub-Link)
(Hier fehlt noch der Link zur Ergebnisseite)
(Permalink/einzelne Projektseite)
Parking Studio↑
Durch das neue StreetComplete-Overlay zu Parkstreifen habe ich mich näher mit Park-Tagging in OpenStreetMap befasst. Leider ist das Tagging fürs Parken doch zum Teil ganz schön sperrig. Insbesondere wenn spezielle Parkbeschränkungen durch Beschilderung ins Spiel kommen. Deshalb habe ich ein Tool gebaut, mit dem man die Art des Parkens am Straßenrand und die Beschilderung der Parkstreifen einfach zusammenklicken kann.
Features:
- Sowohl Art des Parkens, Winkel zur Straße und Beschilderung können für jede Straßenseite festgelegt werden
- Es wird Tagging für Straßen und für Parkplatz-Areas und Nodes unterstützt
- Das Tagging der Parkart kann auch weggelassen werden, wenn man nur Beschilderung hinzufügen möchte
Das Programm ist hier zu finden.
(Permalink/einzelne Projektseite)
StreetComplete-Statistiken↑
Ich habe ein paar statistische Auswertungen rund um StreetComplete gemacht, und in diesem Post beschreibe ich was ich Ausgewertet habe und was die Ergebnisse sind.
Zunächst einmal: Wie habe ich diese Daten ausgewertet, bzw. woher habe ich all die Infos, über die ich hier rede? Grundlage war das Skript StreetCompleteNumbers, dass ich vor einiger Zeit geschrieben habe. Es ist ein Python-Skript, mit dem man die Anzahl der gelösten Quests für einen Nutzer herausfinden kann. Das Skript gibt es auch auf GitHub. Dieses Skript kann man sehr einfach verwenden:
from StreetCompleteNumbers import StreetCompleteNumbers
StreetCompleteNumbers("maxmustermann")
Dann galt es nur noch herauszufinden, wer denn die Nutzer sind, deren StreetComplete-Zahlen wir herunterladen wollen. Dabei habe ich versucht eine Methode zu entwickeln, die eine möglichst kleine Anzahl an Anfragen an die OpenStreetMap-Server stellt. Also einfach für jeden Nutzer der mir unterkommt die gesamte Changeset-History runterladen sollte vermieden werden.
Ich nutzte die täglichen replication-Diffs seit Oktober 2021 (also seit vor einem halben Jahr). Ich lud jede diff-Datei herunter, und sah mir jedes Changeset, dass in ihm vorkommt, an. Sollte ein Changeset den Changeset-Tag StreetComplete:QuestType
enthalten, löse ich für diesen Nutzer ein herunterladen und abspeichern seiner Zahlen aus. Außerdem merkt sich das Programm, für welche Nutzer es schon StreetComplete-Zahlen abgespeichert hat, damit sie nicht zweimal für den selben Nutzer heruntergeladen werden.
Dadurch hatte ich am Ende die StreetComplete-Zahlen für 5284 Nutzer, was meine Datenbasis darstellte. Und so sind wir auch direkt bei der ersten Limitierung dieser Auswertung angelangt. In dieser Statistik tauchen nur Nutzer auf, die zwischen Oktober 2021 und März 2022 mindestens eine StreetComplete-Quest gelöst haben.
Bevor wir jetzt zu den Statistiken kommen, sei noch gesagt, dass ich in dieser Auswertung keine Nutzer beim Namen nennen möchte, weswegen wir gleich nur die Länder der Top-Nutzer sehen werden. So, kommen wir jetzt aber zu den Statistiken:
Wie viele ★ haben die Top-Nutzer?
Die unten stehende Statistik zeigt die Liste an Top-Nutzern in meinem Datensatz zusammen mit ihren Sternen und dem Land, aus dem sie kommen. Hier sei gesagt, dass ich das "Land aus dem sie kommen" "manuell" ermittelt habe. Also ich habe mir die OSM-Profile der betreffenden Nutzer angesehen und einfach nachgesehen wo ihre letzten Changesets so gemacht wurden. Es könnte also absolut sein, dass ich einfach einen ungünstigen Zeitpunkt erwischt habe und die betreffende Person einfach gerade woanders im Urlaub war.
Wie viele Nutzer haben deaktivierte Quests aktiviert?
Dafür habe ich selbst eine Liste mit den standardmäßig deaktivierten Quests erstellt und für jeden Nutzer in meiner Datenbasis überprüft, ob er für mindestens eine dieser Quests mindestens eine Lösung hat. Die Auswertung zeigte, ein Drittel der Nutzer hat nicht eine einzige standardmäßig deaktivierte Quest gelöst. Das muss in der Theorie nicht heißen, dass diese Nutzer keine dieser Quests aktiviert haben, aber da viele Quests deaktiviert sind, weil sie so spammy sind, haben wir hier denke ich eine gute Abschätzung.
Wie viele Quests wurden insgesamt gelöst?
Die Daten, die mir zur Verfügung stehen, weisen darauf hin, dass über 14 Millionen Quests mit StreetComplete gelöst wurden. (Genau gesagt waren es zum Zeitpunkt der Erhebung 13.975.938 Quests, weswegen die Prozentzahlen in der unteren Tabelle auch von diesem Wert ausgehen.)
Wie verteilen sich die gelösten Quests auf die Farben?
Bei StreetComplete hat jede Quest eine Farbe, die sie einer groben Kategorie zuordnet. Die Kategorien sind die Folgenden:
- Blau steht für Gehwege und Fußgänger
- Gelb steht für Straßen und Autos
- Hellgrau (Beige?) steht für Gebäude
- Dunkelgrau steht für
man_made
, also so ungefähr "Infrastruktur" - Orange steht für Geschäfte
- Pink steht für Fahrräder
- Grün steht für öffentliche Einrichtungen wie Bänke und Mülleimer
- Braun steht für Natur
Hier ist die Verteilung als Grafik:
Und hier als Tabelle:
Einzelne Farbe | Gesamt | Prozent | |
---|---|---|---|
Hellbraun | 91112 | 13975938 | 0,65% |
Grau | 109326 | 13975938 | 0,78% |
Orange | 307434 | 13975938 | 2,20% |
Grün | 391304 | 13975938 | 2,80% |
Pink | 585953 | 13975938 | 4,19% |
Gelb | 2963361 | 13975938 | 21,20% |
Blau | 4697256 | 13975938 | 33,61% |
Hellgrau | 4830192 | 13975938 | 34,56% |
Welche Quests werden am häufigsten/seltensten gelöst?
Hier ist eine Grafik, die die 3 am häufigsten gelösten Quests zeigt, sowie die Quests, die insgesamt von allen Nutzern unter 100 mal gelöst wurden:
Ich denke, die Quests mit den extrem wenigen Lösungen lassen sich alle relativ einfach erklären:
- "Kann man an dieser Tankstelle selbst Tanken?" wird in Deutschland - was bei OSM und StreetComplete sehr stark vertreten ist - nicht angezeigt
- "Gibt es an diesem Gipfel ein Gipfelbuch?" ist wahrscheinlich deswegen nicht so oft beantwortet worden, weil es zum einen nicht so viele Gipfel gibt. Zum anderen ist mit StreetComplete durch eine Stadt zu rennen das eine, aber mit StreetComplete auf Berggipfel zu klettern schon was anderes :D
- Die Barrieren-Quests, Klimaanlagen-Quest und physische-Höhe-Quest sind alle relativ neu und wahrscheinlich deshalb noch kaum beantwortet. Bei der Klimaanlagen-Quest kommt hinzu, dass sie standardmäßig deaktiviert ist, und die physische-Höhe-Quest ist meiner Meinung nach auf dem letzten Platz, da man für sie das AR-Vermessungstool nutzen muss, was nicht alle Handys haben
Diese Grafik zeigt ein paar mehr der Quests:
Und hier ist die ganze Liste mit Quests aufsteigend nach der Anzahl ihrer Lösungen:
Quest-ID | Anzahl gelöst | Alle gelösten Quests | Anteil dieser Quest an allen Lösungen |
---|---|---|---|
AddMaxPhysicalHeight | 19 | 13975938 | 0,0001% |
AddAirConditioning | 52 | 13975938 | 0,0004% |
AddBarrierOnRoad | 60 | 13975938 | 0,0004% |
AddSummitRegister | 65 | 13975938 | 0,0005% |
AddBarrierOnPath | 76 | 13975938 | 0,0005% |
AddFuelSelfService | 93 | 13975938 | 0,0007% |
AddAcceptsCash | 122 | 13975938 | 0,0009% |
AddPoliceType | 126 | 13975938 | 0,0009% |
AddCyclewayWidth | 149 | 13975938 | 0,0011% |
AddTrafficCalmingType | 214 | 13975938 | 0,0015% |
AddWheelchairAccessToiletsPart | 376 | 13975938 | 0,0027% |
CheckOpeningHoursSigned | 380 | 13975938 | 0,0027% |
AddFerryAccessPedestrian | 389 | 13975938 | 0,0028% |
AddFerryAccessMotorVehicle | 454 | 13975938 | 0,0032% |
AddStileType | 502 | 13975938 | 0,0036% |
AddBarrierType | 631 | 13975938 | 0,0045% |
AddCameraType | 717 | 13975938 | 0,0051% |
AddBikeParkingFee | 756 | 13975938 | 0,0054% |
AddWheelchairAccessOutside | 756 | 13975938 | 0,0054% |
AddStreetParking | 771 | 13975938 | 0,0055% |
AddLevel | 802 | 13975938 | 0,0057% |
AddBikeParkingAccess | 938 | 13975938 | 0,0067% |
AddChargingStationOperator | 992 | 13975938 | 0,0071% |
AddReligionToPlaceOfWorship | 1027 | 13975938 | 0,0073% |
AddRoadWidth | 1032 | 13975938 | 0,0074% |
AddMotorcycleParkingCapacity | 1060 | 13975938 | 0,0076% |
AddIsBuildingUnderground | 1102 | 13975938 | 0,0079% |
AddSelfServiceLaundry | 1169 | 13975938 | 0,0084% |
AddClothingBinOperator | 1313 | 13975938 | 0,0094% |
AddBusStopRef | 1335 | 13975938 | 0,0096% |
SpecifyShopType | 1354 | 13975938 | 0,0097% |
AddIsDefibrillatorIndoor | 1388 | 13975938 | 0,0099% |
AddSuspectedOneway | 1501 | 13975938 | 0,0107% |
AddAtmOperator | 1502 | 13975938 | 0,0107% |
AddInternetAccess | 1515 | 13975938 | 0,0108% |
AddDrinkingWater | 1673 | 13975938 | 0,0120% |
AddChargingStationCapacity | 1910 | 13975938 | 0,0137% |
AddPostboxRef | 1919 | 13975938 | 0,0137% |
AddInformationToTourism | 2113 | 13975938 | 0,0151% |
AddPostboxRoyalCypher | 2151 | 13975938 | 0,0154% |
AddBabyChangingTable | 2202 | 13975938 | 0,0158% |
AddReligionToWaysideShrine | 2240 | 13975938 | 0,0160% |
AddOrchardProduce | 2315 | 13975938 | 0,0166% |
AddGeneralFee | 2448 | 13975938 | 0,0175% |
AddCarWashType | 2455 | 13975938 | 0,0176% |
AddToiletAvailability | 2519 | 13975938 | 0,0180% |
AddMotorcycleParkingCover | 2638 | 13975938 | 0,0189% |
AddBicycleBarrierType | 2994 | 13975938 | 0,0214% |
DetermineRecyclingGlass | 3040 | 13975938 | 0,0218% |
CheckShopType | 3736 | 13975938 | 0,0267% |
AddWheelchairAccessPublicTransport | 3834 | 13975938 | 0,0274% |
AddOneway | 4034 | 13975938 | 0,0289% |
AddHalal | 4192 | 13975938 | 0,0300% |
AddVegan | 4536 | 13975938 | 0,0325% |
AddKosher | 5104 | 13975938 | 0,0365% |
AddFireHydrantDiameter | 5136 | 13975938 | 0,0367% |
AddWheelchairAccessToilets | 5293 | 13975938 | 0,0379% |
AddSport | 5531 | 13975938 | 0,0396% |
AddBoardType | 5706 | 13975938 | 0,0408% |
AddPicnicTableCover | 6012 | 13975938 | 0,0430% |
AddBusStopName | 6301 | 13975938 | 0,0451% |
AddRecyclingType | 7075 | 13975938 | 0,0506% |
AddToiletsFee | 7367 | 13975938 | 0,0527% |
MarkCompletedBuildingConstruction | 7492 | 13975938 | 0,0536% |
AddFireHydrantPosition | 9948 | 13975938 | 0,0712% |
AddRecyclingContainerMaterials | 11610 | 13975938 | 0,0831% |
AddVegetarian | 11861 | 13975938 | 0,0849% |
AddFireHydrantType | 11906 | 13975938 | 0,0852% |
AddBridgeStructure | 12060 | 13975938 | 0,0863% |
AddCrossing | 16934 | 13975938 | 0,1212% |
AddPostboxCollectionTimes | 17080 | 13975938 | 0,1222% |
AddBollardType | 18123 | 13975938 | 0,1297% |
AddPitchLit | 19606 | 13975938 | 0,1403% |
AddRailwayCrossingBarrier | 20071 | 13975938 | 0,1436% |
AddBikeParkingType | 20437 | 13975938 | 0,1462% |
AddPitchSurface | 22116 | 13975938 | 0,1582% |
AddMaxWeight | 22556 | 13975938 | 0,1614% |
AddCyclewaySegregation | 25751 | 13975938 | 0,1843% |
AddBikeParkingCapacity | 26817 | 13975938 | 0,1919% |
AddProhibitedForPedestrians | 27273 | 13975938 | 0,1951% |
AddCyclewayPartSurface | 28265 | 13975938 | 0,2022% |
AddShoulder | 28278 | 13975938 | 0,2023% |
AddFootwayPartSurface | 28794 | 13975938 | 0,2060% |
AddBikeParkingCover | 31671 | 13975938 | 0,2266% |
AddPathSmoothness | 33433 | 13975938 | 0,2392% |
AddPlaygroundAccess | 35503 | 13975938 | 0,2540% |
MarkCompletedHighwayConstruction | 40526 | 13975938 | 0,2900% |
AddStepCount | 41660 | 13975938 | 0,2981% |
AddTracktype | 41834 | 13975938 | 0,2993% |
AddKerbHeight | 42755 | 13975938 | 0,3059% |
AddMaxHeight | 43728 | 13975938 | 0,3129% |
AddRoadSmoothness | 44434 | 13975938 | 0,3179% |
AddTactilePavingKerb | 44713 | 13975938 | 0,3199% |
AddPlaceName | 46825 | 13975938 | 0,3350% |
AddStepsIncline | 49162 | 13975938 | 0,3518% |
AddPowerPolesMaterial | 62784 | 13975938 | 0,4492% |
AddWheelchairAccessBusiness | 63226 | 13975938 | 0,4524% |
AddTrafficSignalsVibration | 63457 | 13975938 | 0,4540% |
AddTrafficSignalsSound | 69883 | 13975938 | 0,5000% |
AddBusStopLit | 70486 | 13975938 | 0,5043% |
AddHandrail | 72727 | 13975938 | 0,5204% |
AddTrafficSignalsButton | 75446 | 13975938 | 0,5398% |
AddStepsRamp | 77822 | 13975938 | 0,5568% |
AddBinStatusOnBusStop | 82291 | 13975938 | 0,5888% |
AddForestLeafType | 88295 | 13975938 | 0,6318% |
AddRoadName | 93765 | 13975938 | 0,6709% |
AddBenchStatusOnBusStop | 94389 | 13975938 | 0,6754% |
AddBenchBackrest | 98525 | 13975938 | 0,7050% |
AddParkingFee | 100644 | 13975938 | 0,7201% |
AddBusStopShelter | 107404 | 13975938 | 0,7685% |
AddParkingType | 108408 | 13975938 | 0,7757% |
AddTactilePavingBusStop | 119748 | 13975938 | 0,8568% |
CheckExistence | 124524 | 13975938 | 0,8910% |
AddParkingAccess | 141111 | 13975938 | 1,0097% |
AddCrossingType | 145072 | 13975938 | 1,0380% |
AddOpeningHours | 160341 | 13975938 | 1,1473% |
AddCrossingIsland | 170003 | 13975938 | 1,2164% |
AddMaxSpeed | 190915 | 13975938 | 1,3660% |
AddAddressStreet | 268936 | 13975938 | 1,9243% |
AddTactilePavingCrosswalk | 283199 | 13975938 | 2,0263% |
AddLanes | 325145 | 13975938 | 2,3265% |
AddSidewalk | 427435 | 13975938 | 3,0584% |
AddHousenumber | 441068 | 13975938 | 3,1559% |
AddCycleway | 448175 | 13975938 | 3,2068% |
AddRoofShape | 850171 | 13975938 | 6,0831% |
AddPathSurface | 999441 | 13975938 | 7,1512% |
AddBuildingLevels | 1379383 | 13975938 | 9,8697% |
AddWayLit | 1541163 | 13975938 | 11,0273% |
AddRoadSurface | 1726590 | 13975938 | 12,3540% |
AddBuildingType | 1889532 | 13975938 | 13,5199% |
Was können wir aus dieser Statistik mitnehmen?
Wir sehen sehr gut, dass StreetComplete von seinem Nutzen und von seinen Nutzern her ziemich undiversifiziert ist. Wenige Leute sind für den Großteil aller gelösten Quests verantwortlich. Hauptsächlich wird StreetComplete genutzt, um Details zu Häusern, Straßen und Wegen hinzuzufügen. Das scheint aber nicht sonderlich verwunderlich, da eine Stadt nunmal zum großteil aus Häusern, Straßen und Wegen besteht. In dieser Hinsicht ist es also nicht schlimm, dass auch ein Großteil der gelösten Quests auf diese Objekttypen entfällt. Was die Nutzer angeht, sieht es etwas anders aus: Von den über 5000 Nutzern die ich untersuchte sind 100 für 30% aller geösten Quests verantwortlich. Und während ich in der Videoversion dieses Posts zu dem Schluss komme, dass das ein Hinweis auf die nicht so gut aussehende diversifizierung in OpenStreetMap ist, habe ich seit dem noch etwas nachgedacht und komme zu einem anderen Ergebnis. Man muss die Power-User viel mehr rausrechnen, als die anderen Nutzer an ihnen auszurichten. Also der Durchschnittsnutzer macht nicht verhältnismäßig wenig, sondern die Power-User machen verhältnismäßig viel. Betrachtet man es so hat StreetComplete eine gute Nutzerbasis, die relativ gleichmäßig zu OpenStreetMap beiträgt.
(Permalink/einzelne Projektseite)
StreetCompleteNess↑
StreetCompleteNess ist ein kleines Tool, dass ich entwickelt habe, mit dem man sehen kann, zu wie viel Prozent einige ausgewählte StreetComplete-Quests in einer Stadt erledigt wurden. Allerdings ist das Tool nicht nur für StreetComplete-User interessant, sondern für jeden, der für eine Stadt sehen möchte, wo es eventuell noch viele (oder nur ganz wenige) Details zu ergänzen gibt. Das fehlen dieser Attribute kann man nämlich auf einer Karte nicht so gut sehen.
Was kann mit dem Tool gesucht werden?
Das Tool ist auf Städte ausgelegt, und sucht bei einer Eingabe auch erstmal primär nach Städten, allerdings funktionieren alle Eingaben, die durch ein "Boundary"-Polygon angegeben werden. Bedeutet, auch Stadtteile oder Gemeinden könnten funktionieren. Allerdings sollte man aufpassen, denn nicht nur bei anderen Dingen die durch Grenzen angegeben werden (z.B. Bundesländer), sondern auch einfach bei großen Städten geht meinem Server gerne mal der Arbeitsspeicher aus. Daher ist das Tool eher für kleinere Städte gedacht. Anfangs hatte ich einen speziellen Fall eingebaut, um auch die drei Städte in Deutschland abfragen zu können, die technisch gesehen eigene Bundesländer sind. Da diese aber alle drei sowieso den Arbeitsspeicher übersteigen, habe ich diesen special case wieder ausgebaut und dafür die allgemeine Suche nach einem anderen Boundary-Polygon als Fallbacklösung wieder eingebaut.
StreetCompleteNess ist hier zu finden.
(Permalink/einzelne Projektseite)
StreetCompleteNumbers↑
StreetCompleteNumbers ist ein Python-Skript, um die Anzahl der gelösten StreetComplete-Quests für einen OpenStreetMap-Benutzer zu ermitteln.
Das Skript ist auf GitHub verfügbar.
Nach dem Importieren kann man die Funktion StreetCompleteNumbers
mit einem OSM-Benutzernamen als Parameter aufrufen. Die Funktion akzeptiert auch einen integer als zweiten optionalen maximum-Parameter, der, wenn er gesetzt ist, dafür sorgt, dass das Skript nicht mehr als ( maximum * 100 ) Changesets abruft.
from StreetCompleteNumbers import StreetCompleteNumbers
StreetCompleteNumbers("maxmustermann")
Beispielausgabe
Die Funktion liefert ein Tupel mit der Gesamtzahl der gelösten Quests (in StreetComplete als ★ dargestellt) als ersten Wert und ein JSON-Objekt mit den gelösten Questzahlen für jeden Questtyp.
(31549, {'AddMaxSpeed': 231, 'DetermineRecyclingGlass': 29, 'AddRecyclingType': 44, 'AddFootwayPartSurface': 71, 'AddCyclewayPartSurface': 68, 'AddAddressStreet': 30, 'AddHousenumber': 129, 'AddCycleway': 455, 'AddMaxWeight': 28, 'AddParkingFee': 131, 'AddParkingType': 184, 'AddParkingAccess': 209, 'AddPostboxCollectionTimes': 75, 'AddPlaygroundAccess': 85, 'AddRecyclingContainerMaterials': 58, 'AddTrafficSignalsButton': 82, 'AddTrafficSignalsVibration': 102, 'AddTrafficSignalsSound': 93, 'AddVegetarian': 75, 'AddOpeningHours': 450, 'AddPlaceName': 98, 'AddWheelchairAccessBusiness': 307, 'AddVegan': 35, 'AddBenchBackrest': 245, 'AddSidewalk': 511, 'AddStepCount': 290, 'AddHandrail': 297, 'AddStepsIncline': 259, 'AddStepsRamp': 315, 'AddPathSurface': 2983, 'AddForestLeafType': 65, 'AddRoadSurface': 987, 'AddLanes': 204, 'AddRoofShape': 4189, 'AddBuildingLevels': 6030, 'AddBuildingType': 8146, 'AddTactilePavingCrosswalk': 155, 'AddCrossingIsland': 58, 'AddCrossingType': 76, 'AddBollardType': 12, 'AddToiletsFee': 6, 'AddWheelchairAccessToilets': 9, 'AddRailwayCrossingBarrier': 18, 'AddInternetAccess': 15, 'AddGeneralFee': 5, 'AddRoadName': 58, 'AddPitchSurface': 22, 'AddBusStopShelter': 42, 'AddBenchStatusOnBusStop': 44, 'AddTactilePavingBusStop': 78, 'CheckExistence': 325, 'AddTracktype': 31, 'AddMaxHeight': 63, 'AddWayLit': 2521, 'AddBusStopLit': 40, 'AddBikeParkingType': 18, 'AddCyclewaySegregation': 83, 'AddProhibitedForPedestrians': 18, 'AddPitchLit': 19, 'AddBikeParkingFee': 1, 'AddBikeParkingCapacity': 34, 'AddClothingBinOperator': 17, 'AddFireHydrantType': 4, 'AddChargingStationOperator': 11, 'AddChargingStationCapacity': 10, 'AddBabyChangingTable': 5, 'AddBikeParkingCover': 26, 'AddBoardType': 21, 'AddBikeParkingAccess': 1, 'SpecifyShopType': 1, 'AddBarrierType': 1, 'MarkCompletedHighwayConstruction': 16, 'AddAtmOperator': 3, 'AddPowerPolesMaterial': 42, 'AddBusStopName': 3, 'AddSummitRegister': 1, 'AddBridgeStructure': 8, 'AddSport': 11, 'AddCarWashType': 4, 'CheckShopType': 5, 'MarkCompletedBuildingConstruction': 3, 'AddSuspectedOneway': 3, 'AddToiletAvailability': 1, 'AddOneway': 2, 'AddInformationToTourism': 3, 'AddWheelchairAccessOutside': 1, 'AddKerbHeight': 1, 'AddTactilePavingKerb': 1, 'AddMotorcycleParkingCover': 2, 'AddFerryAccessMotorVehicle': 1})
(Permalink/einzelne Projektseite)
TUC Mensa Bot↑
Die Seite der Mensa, auf der man das Essen nachsehen kann, lädt bei gedrosseltem Internet nur schwer und die TU Chemnitz App ist irgendwie auch meistens mit der Aufgabe das Essen anzuzeigen überfordert. Also hab ich einfach einen Bot programmiert, der schnell und einfach das Essen der TU Mensa anzeigt. Das besondere: Man kann diesen Bot mit /english
auch so einstellen, dass er das Essen auf Englisch versendet. Damit ist dieser Bot die einzige englischsprachige digitale Möglichkeit, das Essen der Mensa einzusehen. Um das Essen zugeschickt zu bekommen schreib einfach /essen
oder irgendeinen Text (und ja, ich meine irgendeinen Text, du kannst ihm auch bnasjfn
senden), und er wird mit dem Essen gemäß deiner Einstellungen antworten. Ab 2019 hat der TUC Mensa Bot eine neue, sehr wichtige Funktion! Es ist nun möglich, eine Mensa oder eine Caféteria zu wählen, für die das Essen dann angezeigt wird. Ursprünglich war es immer die Mensa Reichenhainer Straße, und das war meistens auch okay, da es in der Straße der Nationen meistens fast das selbe gibt. Aber es gibt ja auch noch zwei andere Mensen, und die Caféterien, in denen es immer andere Sachen gibt. Deshalb kann man sie jetzt mit dem Kommando /mensa
einstellen.
Klicke hier, um mit dem Bot zu sprechen
2019 Update
- Es ist nun möglich, die Mensa, deren Essen angezeigt werden soll, mit
/mensa
zu wählen
(Permalink/einzelne Projektseite)
Status-Saver für WhatsApp↑
Ich habe eine kleine App geschrieben, mit der man WhatsApp-Stories abspeichern kann.
Features
- Viele Stories auf einmal abspeichern
- Ansicht zum Ansehen der gespeicherten Storys
- Kompatibilität für WhatsApp-Buisiness
Download
Geplante Features
- Aus der App heraus gespeicherte Storys teilen
(Permalink/einzelne Projektseite)
WhatsAppToJSON↑
Damit ich versuchen kann, einen Chatterbot mit WhatsApp-Chats zu trainieren, musste ich das ganze in eine gut zu verarbeitende Form bringen. Da ich JSON sehr mag, habe ich mich entschieden die Chat-Exports in JSON zu konvertieren.
(Permalink/einzelne Projektseite)
YouTube-Annotation-Archive↑
Am 15.01.2019 hat YouTube die alten Anmerkungen endgültig gelöscht. In der Hoffnung, dass es irgendwann mal einen costum Player geben wird, der diese wieder anzeigen kann, hat ein GitHub-Nutzer schnell ein Programm zusammengepackt, dass die Anmerkungen Kanalweise exportieren kann. Ich wollte mich am konservieren der Anmerkungen beteiligen, also habe ich einige Kanäle (a.k.a. u.a. alle meine Abonnierten) exportiert, und die Ergebnisse auf GitHub frei verfügbar gemacht. Herausgekommen sind ~8000 XML-Dateien mit den Anmerkungen der Videos.