Source: https://gist.github.com/Wikinaut/f4389e7086f9c29f10c8f854183dacab
Timestamp: 2020-08-13 01:06:36
Document Index: 113230207

Matched Legal Cases: ['§111', '§ 57', '§ 161', '§ 46', '§ 164', '§ 147', '§12']

Vereinfachte Verkehrsordnungswidrigkeitenanzeige bei Halt- und Parkverstößen per E-Mail an die Bußgeldstelle · GitHub
Wikinaut/README.md
forked from tordans/README.md
Code Revisions 137 Stars 1 Forks 2
Vereinfachte Verkehrsordnungswidrigkeitenanzeige bei Halt- und Parkverstößen per E-Mail an die Bußgeldstelle
Direkt nutzbar unter https://wikinaut.github.io/bowi/
Neue Source-Location ist: https://github.com/Wikinaut/bowi
Diese Weiterentwicklung basiert auf dem ursprünglichen Code von @BerlinCyclist auf https://jsfiddle.net/spy2eh0h/44 , benutzt aber keine Google-Services mehr, sondern nur noch OpenStreetMap.
Dieser Code basiert auf dem ursprünglichen Code von @BerlinCyclist auf https://jsfiddle.net/spy2eh0h/44
und des ersten Forks als Gist von @Tordans.
Initial version by @BerlinCyclist ~2017
Wikinaut 20190727-0111 first new running version, OSM only, zero Google code
SHOWSTOPPER/KILLER:
embedding inline (base64-coded) images does not work on Android phones w/ K9-Mail, BlueMail
Check the image rotation flag
add handling of missing EXIF data:
missing GPS coordinates -> ping user
missing GPS data: use file creation date (if available)
allow to send without EXIF images: in this case prompt the user for a manual address location information
Possibility to configure the preset texts
BOWI-Expert vs. BOWI-light mode (reduced information)
Links to Bußgeldkatalog BKat und/oder Tatbestandsnummer
add buttons to delete attached images
ul .warntext {
var quality = 0.3;
function reverseGeoLocateNominatim(latlng, targetElement ) {
// example: https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=52.483&lon=13.35
$.getJSON( "https://nominatim.openstreetmap.org/reverse",
{ format: 'jsonv2',
lat: latlng.lat,
lon: latlng.lng
var display_addr = response.display_name; // Basic location information
var a = response.address;
var addr = a.country + ', '
+ a.postcode + ' ' + a.city + ' (' + a.city_district + '/' + a.suburb + '), '
+ a.postcode + ' ' + a.village + ' (' + a.city_district + '/' + a.county + '/' + a.state + '), '
+ a.road + ' ' + a.house_number;
$.each( Object.keys(response.address).reverse(), function( key, keyname ) {
addr += keyname + ": " + response.address[keyname] + "<br>";
$(targetElement).html( display_addr + "<br>" + addr );
// the full results JSON
function reverseGeotagImageAndCreatePreview(imgfile, container) {
if ( EXIF.getTag(this, 'GPSDateStamp') ) {
var datetime_s = EXIF.getTag(this, 'GPSDateStamp').replace(/:/g, '-') + " " +
EXIF.getTag(this, 'GPSTimeStamp')
.replace(/(^|\b|:)([0-9])\b/g, "$1" + '0' + "$2")
.replace(/\.[0-9]+$/, '') + " UTC";
console.log( "no EXIF data found." );
var datetime_s = "No EXIF GPSDateStamp found.";
/* was soll das machen?
/* if (result.length && result.length > 64*1024) { // at least 64 kB
reverseGeoLocateNominatim(latlng, loc_elem);
// datetime_p.appendChild(document.createElement("br"));
// Using OSM with a marker
a.href = 'https://www.openstreetmap.org/?mlat=' + lat + '&mlon=' + lon + '#map=19/' + lat + '/' + lon;
a.appendChild(document.createTextNode( lat.toFixed(4) + "," + lon.toFixed(4) + " (klicken, um Aufnahmeort in OpenStreetMap anzuzeigen)" ));
/* datetime_p.appendChild(document.createTextNode("Aufnahmezeitpunkt: " + datetime_s + ' (' + datetime.toLocaleString('de-DE', {
datetime_p.appendChild(document.createTextNode("Aufnahmezeitpunkt: " + datetime.toLocaleString('de-DE', {
var deleteButton = "<span class='deletebutton'>" + wasteBasketSymbol + "</span>";
$( container ).append( deleteButton );
$( container ).find(".deletebutton").click( function() {
reverseGeotagImageAndCreatePreview(imgfile, container);
if (nodeList[i].name === "Anschriftstrasse") {
elem.href = "https://www.openstreetmap.org/search?query=" +
encodeURI(nodeList[i+1].value) + "," +
encodeURI(nodeList[i].value);
var greenTickSymbol = '<img src="data:image/x-icon;base64,R0lGODlhDwANANUAAB7MHSrTKkfaR0vaS3jkeJ3rnaHsoanuqa3vrbHvsb7yvsr0ys71zub65uv76/f99yDLHB/OHSDGHCPQISTMICfPJTjUNiDGGiLBGiG/GiHCGynMIyO+GSK7GSK6GSi/HSSyFjzCMFzNUqfioiauFC6zHszuyKndoNTu0CmlEiiiElS5QWC+T+/57SugDyqiES6gFW26WaPUl1KrOeXy4YK9bZzMjMrkwVWlOGuwUt3t1+jz5PT58vv9+v///////yH5BAEAAD8ALAAAAAAPAA0AAAZWwJ9wSBw+ikhhYWNKEhUUUc8pZFRCLeqvYfmgtI8B5lQ0LIiEC6s40kwSwgOgRCvOUp0IwhHgyJA7OC4eEwISK1NIPDkqGRAkN1Q9NS8gMVpCNjA6SUEAOw==">';
var attentionSymbol = '<img src="data:image/x-icon;base64,R0lGODlhDgAOAPcAAP/////uAP/mAP/hAOni4uTb28u6usDAgKCAgAAAAP///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH5BAEAAAAALAAAAAAOAA4AAAhoAAEIFFgAAYICAxMSRHDgwEGFAxkOEOAQIoCCAyYOeKhQYkOKCBRiDJAggYCNBhJKJGkS5MCRLAMIEIAgJYCVMWdWxDgggE+fM1FKFOCzpEydBjMSZTkzqMEDGaNKHeCQgMGrWK8SCAgAOw==">';
var wasteBasketSymbol = '<img height=16 width=16 src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABz0lEQVRYhc2XvyuFURjHP/cmSUYpZZBMkkH+AOVkNEoGyaAkgwwGg1EWk82ubEbDYzFLkmTB7Q663SSDJN1keM+r854fvfd1ndv9Ts/7Pb8+nfO8T+eUKCil1ABwDvRZTW/AjIi8FpmvqygAsAqMB9qWgYMik5XSQClVBqaB/pwxu8BYoO0K2M8ZXwcuROQbsjtwBKzkDM7TJHDSRL9DYAOgbJiLLS5eRAtpYAL8JR/+qi4nAHbIAsXUVxqUTFcpNUF+Eraquojcph/2tm+S/Eox9ZuA4G75U+TFnTVsgEobAKrmh30EIYA74EzHSyR58gicam8eGAJqwLH25oBRz1yZNZoFuBSRLQCl1KwGuDe8KQ1QNbzhZgDsI3gGGgGI/9A78BIEEJEG1hn9syoikjF8hScqgG34AJxO7QaIWQucuTtyB2ICOPnVkTsQqxY4NcALELEWODXAC6AVBcBnhgC8ndsJEKMWeOfs2B2IAeDNq5LPVEqNAA+G1QA+ddxLAm56PSR3i2/gw/JSDYpIzV4r9BaokNx4Rox+9mPU55U9HsAtyW3JkfcI9LttDeP+3oI+gXVfDYDAEaTSV61tktdwd8GFv4BrYE9EbkKdfgBbVn197/txVQAAAABJRU5ErkJggg==">';
$('#clearLocalStorage')
.append( wasteBasketSymbol )
if ( confirm( "Wollen Sie wirklich alle Ihre lokal speicherten Daten löschen?" ) ) {
// if (document.getElementById('imgfiles').files.length > 0 && document.getElementsByClassName('location').length > 0) {
if (document.getElementById('imgfiles').files.length > 0 /* && document.getElementsByClassName('location').length > 0 */ ) {
if ( document.execCommand("copy")
&& confirm( "Der gesamte Anzeigetext mit Foto/s wurde jetzt in den Zwischenspeicher kopiert.\n" +
"Diesen bitte per 'Einfügen' in die E-Mail (geöffnetes Mailprogramm in anderem Fenster) einfügen und an anzeige@bowi.berlin.de senden.\n" +
"Die E-Mail kann vor dem Absenden ggfs. noch verändert bzw. verworfen werden.") ) {
// if ( confirm( "Bitte fügen Sie wenigstens ein Foto mit aktiviertem Ortungsdienst (GPS) bei!") ) {
if ( confirm( "Bitte fügen Sie wenigstens ein Foto bei!") ) {
$('#imgfiles').click();
<li><button onclick="document.getElementsByName('Name')[0].focus(); return false;">Adresse eingeben</button><br></li>
<li><button onclick="document.getElementsByName('Verkehrsverstoss')[0].focus(); return false;">Vorwurf auswählen</button><br></li>
<h2>Vereinfachte Verkehrsordnungswidrigkeitenanzeige bei Halt- und Parkverstößen per E-Mail an die Bußgeldstelle der Polizei</h2>
<strong>Anzeigende/Anzeigender = Zeuge/Zeugin:</strong>
<input name="Name" placeholder="Anrede Vorname Familienname" type="text" required><br>
<input name="Anschriftstrasse" placeholder="Straße Hausnummer" type="text" required><br>
<input name="Anschriftort" placeholder="PLZ Ort" type="text" required><br>
<input name="Kontakt" placeholder="optional für Rückfragen: Telefonnummer und/oder E-Mail-Adresse" type="text">
<li class="warntext">Meine vorstehend angegebenen Personalien sind zutreffend und — soweit erforderlich — vollständig (<a href="https://dejure.org/gesetze/OWiG/111.html">§111 OWiG</a>).</li>
<li class="warntext">Mir ist bewusst, dass ich als Zeugin / Zeuge zur wahrheitsgemäßen Aussage (<a href="https://dejure.org/gesetze/StPO/57.html">§ 57</a> und <a href="https://dejure.org/gesetze/StPO/161a.html">§ 161a StPO</a> i. V. m. <a href="https://dejure.org/gesetze/OWiG/46.html">§ 46 OWiG</a>)
<li class="warntext">Ich weiß, dass vorsätzlich falsche Angaben zu angeblichen Ordnungswidrigkeiten eine Straftat (<a href="https://dejure.org/gesetze/StGB/164.html">§ 164 StGB</a>) darstellen können.</li>
<li class="warntext">Ich weiß, dass die angezeigte Person bei einer Akteneinsicht auch meinen Namen und vollständige Adresse ersehen kann (<a href="https://dejure.org/gesetze/StPO/147.html">§ 147 StPO</a>).</li>
<strong>Angaben zum Verkehrsverstoß:</strong>
<tt>(was)&nbsp;</tt><select name="Verkehrsverstoss">
<option selected="">Parken (§12(2) StVO: „Wer sein Fahrzeug verlässt oder länger als drei Minuten hält, der parkt.“)</option>
</select><br><tt>(wo)&nbsp;&nbsp;</tt><select name="Verkehrsfläche">
<option selected="">auf Radfahrstreifen (Breitstrich Z295 0,25 m und Z237)</option>
<option>auf Schutzstreifen (Z340: unterbrochene weiße Linie 1:1)</option>
<option>auf Radweg (Hochbordradweg mit Z237)</option>
<option>auf Gehweg</option>
<option>auf Sonderweg</option>
<option>in verkehrsberuhigter Z325-Zone außerhalb dafür gekennzeichneten Fläche/n</option>
<option>im 5-Meter-Bereich vor/hinter Kreuzungen/Einmündungen</option>
<option>vor Grundstücksein/ausfahrten, auf schmalen Fahrbahnen auch ihnen gegenüber</option>
<option>vor Bordsteinabsenkungen</option>
<option>auf Sperrfläche (Z298)</option>
</select><br><tt>(wie)&nbsp;</tt><select name="Qualifizierung">
<option>ohne Behinderung</option>
<option selected="">mit Gefährdung: ich musste in den Fließverkehr ausweichen</option>
<strong>Fotos mit Orts- und Zeitangaben:</strong><br>
<p class="remove">Bitte fügen Sie aussagekräftige Fotos - wenn möglich mit aktiviertem Ortungsdienst (GPS) - bei. Darauf sollten das Fahrzeug, sein amtliches Kennzeichen und die relevanten Verkehrszeichen ersichtlich
sein.<br> Bei zeitabhängigen Verstößen (&gt;3 min; &gt;1 h; &gt;3
<div id="sendMail" class="remove">Eine Mail mit den oben angezeigten Daten an <a href="mailto:anzeige@bowi.berlin.de?Subject=Verkehrsordnungswidrigkeitenanzeige%20bei%20Halt-%20und%20Parkverst%C3%B6%C3%9Fen&amp;Body=%5BBitte%20das%20ausgef%C3%BCllte%20Formular%20kopieren%20und%20hier%20einf%C3%BCgen%5D" title="Link zur E-Mail">anzeige@bowi.berlin.de</a> (Bußgeldstelle der Berliner Polizei) vorbereiten.</div>
<div>Bei Bedarf können Sie <span id="clearLocalStorage">hier klicken</span>, um alle Ihre lokale Daten zu löschen und das Formular so zurückzusetzen.</div>