|
<!DOCTYPE html> |
|
<html> |
|
<head> |
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> |
|
<title>Verkehrsordnungswidrigkeitenanzeige bei Halt- und Parkverstößen</title> |
|
<meta name="robots" content="noindex, nofollow"> |
|
<meta name="viewport" content="width=device-width, initial-scale=1"> |
|
|
|
<!-- |
|
|
|
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 |
|
License: WTFPL |
|
|
|
FIXME: |
|
|
|
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) |
|
|
|
TODO: |
|
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 |
|
|
|
--> |
|
|
|
<style id="compiled-css" type="text/css"> |
|
body { |
|
font-family: Helvetica, Arial, sans-serif; |
|
/* font-size: 2.2vh; */ |
|
zoom: 66.67%; |
|
} |
|
|
|
h2 { |
|
color: #b5050e; |
|
} |
|
|
|
input, |
|
textarea { |
|
width: 32em; |
|
} |
|
|
|
ol>li { |
|
padding-bottom: 1em; |
|
} |
|
|
|
ul .warntext { |
|
list-style-type: disc; |
|
list-style-position: outside; |
|
} |
|
|
|
</style> |
|
|
|
<script> |
|
window.onload=function(){ |
|
|
|
function resizeImageToDataUri(img, width, height) { |
|
// create an off-screen canvas |
|
var canvas = document.createElement('canvas'); |
|
var ctx = canvas.getContext('2d'); |
|
|
|
// set its dimension to target size |
|
canvas.width = width; |
|
canvas.height = height; |
|
var size = img.src.length; |
|
console.log({size, width, height}); |
|
|
|
// draw source image into the off-screen canvas: |
|
ctx.drawImage(img, 0, 0, width, height); |
|
|
|
// encode image to data-uri with base64 version of compressed image |
|
var quality = 0.3; |
|
var result = canvas.toDataURL('image/jpeg', quality); // quality = [0.0, 1.0] |
|
console.log(result.length); |
|
//document.getElementsByTagName('body')[0].appendChild(canvas); |
|
return result; |
|
} |
|
|
|
function selectElementContents(element) { |
|
var range = document.createRange(); |
|
range.selectNodeContents(element); |
|
var selection = window.getSelection(); |
|
selection.removeAllRanges(); |
|
selection.addRange(range); |
|
} |
|
|
|
function toDecimal(number) { |
|
if (typeof(number) != "undefined") { |
|
return number[0].numerator + number[1].numerator / |
|
(60 * number[1].denominator) + number[2].numerator / (3600 * number[2].denominator); |
|
} else { |
|
return 0; |
|
} |
|
} |
|
|
|
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 |
|
}) |
|
.done( function( response ) { |
|
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; |
|
*/ |
|
|
|
var addr = ""; |
|
$.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 |
|
console.log( response ); |
|
}); |
|
} |
|
|
|
|
|
function reverseGeotagImageAndCreatePreview(imgfile, container) { |
|
|
|
EXIF.getData(imgfile, function() { |
|
|
|
if ( EXIF.getTag(this, 'GPSDateStamp') ) { |
|
|
|
var lat = toDecimal(EXIF.getTag(this, 'GPSLatitude')); |
|
var lon = toDecimal(EXIF.getTag(this, 'GPSLongitude')); |
|
//console.log(EXIF.getTag(this, 'GPSTimeStamp')); |
|
//console.log(EXIF.getTag(this, 'GPSTimeStamp').join(':').replace(/(^|\b|:)([0-9])\b/g, "$10$2")); |
|
|
|
var datetime_s = EXIF.getTag(this, 'GPSDateStamp').replace(/:/g, '-') + " " + |
|
EXIF.getTag(this, 'GPSTimeStamp') |
|
.join(':') |
|
.replace(/(^|\b|:)([0-9])\b/g, "$1" + '0' + "$2") |
|
.replace(/\.[0-9]+$/, '') + " UTC"; |
|
|
|
var latlng = { |
|
lat: lat, |
|
lng: lon |
|
}; |
|
//console.log(JSON.stringify(EXIF.getAllTags(this))); |
|
|
|
} else { |
|
|
|
console.log( "no EXIF data found." ); |
|
|
|
var datetime_s = "No EXIF GPSDateStamp found."; |
|
var lat = 0.0; |
|
var lon = 0.0; |
|
|
|
var latlng = { |
|
lat: 0.0, |
|
lng: 0.0 |
|
}; |
|
|
|
} |
|
|
|
var datetime_p = document.createElement("p"); |
|
|
|
//var imageWidth = EXIF.getTag(this, 'PixelXDimension') || 1024; //FIXME |
|
//var imageHeight = EXIF.getTag(this, 'PixelYDimension') || 200;//FIXME |
|
//var newWidth = Math.min(1024, imageWidth); |
|
|
|
|
|
var reader = new FileReader(); |
|
reader.readAsDataURL(imgfile); |
|
reader.onload = function(event) { |
|
var preview_img = document.createElement('img'); |
|
var zoomLevel = window.getComputedStyle(document.getElementsByTagName('body')[0], null).getPropertyValue('zoom'); |
|
if (!zoomLevel) { |
|
zoomLevel = 1; |
|
} |
|
preview_img.src = reader.result; |
|
preview_img.onload = function() { |
|
//console.log(JSON.stringify(preview_img.naturalWidth)); |
|
var imageWidth = preview_img.naturalWidth; |
|
var imageHeight = preview_img.naturalHeight; |
|
var newWidth = Math.min(1024, imageWidth); |
|
preview_img.width = Math.min(Math.round(window.innerWidth / 2 / zoomLevel), newWidth); |
|
preview_img.maxWidth = 320; //FIXME (device width) |
|
|
|
var count = 0; |
|
var result = resizeImageToDataUri(this, newWidth, newWidth * imageHeight / imageWidth); |
|
|
|
/* was soll das machen? |
|
while (result.length < 16*1024 && count++ < 5) { |
|
console.log({count: count, "result.length": result.length}); |
|
result = resizeImageToDataUri(this, newWidth, newWidth * imageHeight / imageWidth); |
|
} |
|
*/ |
|
/* if (result.length && result.length > 64*1024) { // at least 64 kB |
|
this.src = result; |
|
this.onload = null; |
|
//this.style = "border: 1px solid yellow;"; |
|
} else { |
|
this.style = "border: 1px solid red;"; |
|
} |
|
*/ |
|
} |
|
datetime_p.appendChild(preview_img); |
|
}; |
|
|
|
datetime_p.appendChild(document.createTextNode("Aufnahmeort: ")); |
|
var loc_elem = document.createElement("span"); |
|
loc_elem.className = "location"; |
|
datetime_p.appendChild(loc_elem); |
|
reverseGeoLocateNominatim(latlng, loc_elem); |
|
// datetime_p.appendChild(document.createElement("br")); |
|
|
|
datetime_p.appendChild(document.createTextNode("GPS: ")); |
|
var a = document.createElement('a'); |
|
|
|
// Using OSM with a marker |
|
a.href = 'https://www.openstreetmap.org/?mlat=' + lat + '&mlon=' + lon + '#map=19/' + lat + '/' + lon; |
|
a.target = '_blank'; |
|
a.appendChild(document.createTextNode( lat.toFixed(4) + "," + lon.toFixed(4) + " (klicken, um Aufnahmeort in OpenStreetMap anzuzeigen)" )); |
|
datetime_p.appendChild(a); |
|
|
|
var datetime = new Date(datetime_s.replace(/ /, 'T').replace(/ UTC/, 'Z')); |
|
datetime_p.appendChild(document.createElement("br")); |
|
|
|
/* datetime_p.appendChild(document.createTextNode("Aufnahmezeitpunkt: " + datetime_s + ' (' + datetime.toLocaleString('de-DE', { |
|
weekday: 'short', |
|
year: 'numeric', |
|
month: 'short', |
|
day: 'numeric', |
|
hour: 'numeric', |
|
minute: 'numeric', |
|
second: 'numeric', |
|
timeZoneName: 'short' |
|
}) + ')')); |
|
*/ |
|
|
|
datetime_p.appendChild(document.createTextNode("Aufnahmezeitpunkt: " + datetime.toLocaleString('de-DE', { |
|
weekday: 'short', |
|
year: 'numeric', |
|
month: 'short', |
|
day: 'numeric', |
|
hour: 'numeric', |
|
minute: 'numeric', |
|
second: 'numeric', |
|
timeZoneName: 'short' |
|
}) |
|
)); |
|
|
|
datetime_p.appendChild(document.createElement("br")); |
|
container.appendChild(datetime_p); |
|
|
|
}); |
|
} |
|
|
|
$("#imgfiles").change(function() { |
|
for (i = 0; i < document.getElementById('imgfiles').files.length; i++) { |
|
var container = document.createElement('div'); |
|
var imgfile = document.getElementById('imgfiles').files[i]; |
|
if (!imgfile.type.match('image')) { |
|
continue; |
|
} |
|
var deleteButton = "<span class='deletebutton'>" + wasteBasketSymbol + "</span>"; |
|
$( container ).append( deleteButton ); |
|
$( container ).find(".deletebutton").click( function() { |
|
$(this).parent().remove(); |
|
}); |
|
|
|
reverseGeotagImageAndCreatePreview(imgfile, container); |
|
this.parentNode.appendChild(container); |
|
} |
|
}); |
|
|
|
function sendMail(address) { |
|
var docLoc = document.location; |
|
mailWin = window.open('mailto:' + address, 'emailWindow'); |
|
|
|
if (mailWin && mailWin.open && !mailWin.closed) { |
|
mailWin.close(); |
|
} else { |
|
docLoc = 'mailto:' + address; |
|
} |
|
|
|
} |
|
|
|
function cleanup(nodeList) { |
|
for (i = 0; i < nodeList.length; i++) { |
|
//alert(nodeList.length); |
|
if (nodeList[i].classList.contains("remove") || nodeList[i].value === null || nodeList[i].value === '') { |
|
if (nodeList[i].nextSibling && nodeList[i].nextSibling.tagName === "BR") { |
|
nodeList[i].nextSibling.remove(); |
|
} |
|
nodeList[i].remove(); |
|
i--; |
|
} else if (nodeList[i].type === "text" || nodeList[i].type === "select-one" || nodeList[i].type === "textarea") { |
|
var elem; |
|
if (nodeList[i].name === "Anschriftstrasse") { |
|
elem = document.createElement("a"); |
|
elem.href = "https://www.openstreetmap.org/search?query=" + |
|
encodeURI(nodeList[i+1].value) + "," + |
|
encodeURI(nodeList[i].value); |
|
elem.target = "_blank"; |
|
} else { |
|
elem = document.createElement("span"); |
|
} |
|
elem.innerHTML = nodeList[i].value; |
|
nodeList[i].replaceWith(elem); |
|
document.getElementsByTagName('body')[0].style.fontSize = "1em"; |
|
document.getElementsByTagName('body')[0].style.zoom = "reset"; |
|
i--; |
|
} |
|
} |
|
} |
|
|
|
function clearLocalStorage() { |
|
localStorage.clear(); |
|
} |
|
|
|
function saveLocalStorage(nodeList) { |
|
for (i = 0; i < nodeList.length; i++) { |
|
localStorage.setItem(nodeList[i].name, nodeList[i].value.trim()); |
|
} |
|
} |
|
|
|
function loadLocalStorage(nodeList) { |
|
for (i = 0; i < nodeList.length; i++) { |
|
var value = localStorage.getItem(nodeList[i].name); |
|
if (value && (nodeList[i].type === "text" || nodeList[i].type === "textarea" || nodeList[i].type === "select-one")) { |
|
nodeList[i].value = value.trim(); |
|
} |
|
} |
|
} |
|
|
|
|
|
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==">'; |
|
|
|
$(document).ready(function() { |
|
loadLocalStorage(document.getElementsByTagName('input')); |
|
loadLocalStorage(document.getElementsByTagName('textarea')); |
|
loadLocalStorage(document.getElementsByTagName('select')); |
|
}); |
|
|
|
$('input').change(function() { |
|
saveLocalStorage(document.getElementsByTagName('input')); |
|
}); |
|
|
|
$('textarea').change(function() { |
|
saveLocalStorage(document.getElementsByTagName('textarea')); |
|
}); |
|
|
|
$('select').change(function() { |
|
saveLocalStorage(document.getElementsByTagName('select')); |
|
}); |
|
|
|
$('#clearLocalStorage') |
|
.append( wasteBasketSymbol ) |
|
.hover(function() { |
|
$(this).css('cursor','pointer'); |
|
}) |
|
.click(function() { |
|
if ( confirm( "Wollen Sie wirklich alle Ihre lokal speicherten Daten löschen?" ) ) { |
|
clearLocalStorage(); |
|
location.reload(true); |
|
} |
|
}); |
|
|
|
$('#sendMail').click(function() { |
|
|
|
// if (document.getElementById('imgfiles').files.length > 0 && document.getElementsByClassName('location').length > 0) { |
|
if (document.getElementById('imgfiles').files.length > 0 /* && document.getElementsByClassName('location').length > 0 */ ) { |
|
|
|
cleanup(document.getElementsByClassName('remove')); |
|
cleanup(document.getElementsByTagName('input')); |
|
cleanup(document.getElementsByTagName('textarea')); |
|
cleanup(document.getElementsByTagName('select')); |
|
|
|
selectElementContents(document.getElementsByTagName('body')[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 [email protected] senden.\n" + |
|
"Die E-Mail kann vor dem Absenden ggfs. noch verändert bzw. verworfen werden.") ) { |
|
sendMail('[email protected]?Subject=Verkehrsordnungswidrigkeitenanzeige%20bei%20Halt-%20und%20Parkverst%C3%B6%C3%9Fen&Body=%5BBitte%20hier%20das%20kopierte%20Formular%20einf%C3%BCgen%5D'); |
|
location.reload(false); |
|
return false; |
|
} else { |
|
return false; |
|
} |
|
} else { |
|
// 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(); |
|
}; |
|
return false; |
|
} |
|
}); |
|
|
|
} |
|
|
|
//]]> |
|
</script> |
|
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> |
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/exif-js/2.3.0/exif.min.js"></script> |
|
|
|
</head> |
|
<body> |
|
|
|
<div id="navElements" class="remove" style="position: fixed; right: 25px; top: 5px; padding: 5px; text-align: center; line-height: 25px; font-size: 20px; border: 0px solid lime; zoom: reset;"> |
|
<fieldset style="position: relative; float: left; background-color: rgba(190,190,190,0.4); font-size: small; text-shadow: 2px 2px 4px white; padding: 5px;"> |
|
<legend style="background-color: rgba(210,210,210,0.8); font-size: 80%; text-shadow: 2px 2px 4px white; box-shadow: 2px 2px 4px grey;">In 4 Schritten zur Anzeige</legend> |
|
<ol> |
|
<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> |
|
<li><button onclick="document.getElementById('imgfiles').click(); return false;">Bilder auswählen</button><br></li> |
|
<li><button onclick="document.getElementById('sendMail').click(); return false;">E-Mail erzeugen</button><br></li> |
|
</ol> |
|
</fieldset> |
|
<!-- |
|
<div style="position: relative; float: right; border: 0px solid blue;"> |
|
<input type="button" value="^^" style="width: 2.5em" onClick="var actionElement = (document.scrollingElement || document.body); actionElement.scrollTop = 0; return false;"><br> |
|
<input type="button" value="+" style="width: 2.5em" onClick="var actionElement = document.getElementsByTagName('body')[0]; actionElement.style.zoom = (parseFloat(window.getComputedStyle(actionElement, null).getPropertyValue('zoom')) * 1.2); return false;"><br> |
|
<input type="button" value="*" style="width: 2.5em" onClick="var actionElement = document.getElementsByTagName('body')[0]; actionElement.style.zoom = 'reset'; actionElement.style.fontSize = '1em'; return false;"><br> |
|
<input type="button" value="-" style="width: 2.5em" onClick="var actionElement = document.getElementsByTagName('body')[0]; actionElement.style.zoom = (parseFloat(window.getComputedStyle(actionElement, null).getPropertyValue('zoom')) * 0.8); return false;"><br> |
|
<input type="button" value="v" style="width: 2.5em" onClick="$('body').animate({ scrollTop: $('#sendMail').offset().top }, 500); return false;"><br> |
|
<input type="button" value="vv" style="width: 2.5em" onClick="var actionElement = (document.scrollingElement || document.body); actionElement.scrollTop = actionElement.scrollHeight; return false;"><br> |
|
</div> |
|
--> |
|
</div> |
|
|
|
|
|
<h2>Vereinfachte Verkehrsordnungswidrigkeitenanzeige bei Halt- und Parkverstößen per E-Mail an die Bußgeldstelle der Polizei</h2> |
|
<ul class="remove"> |
|
<li><a href="https://www.berlin.de/polizei/aufgaben/bussgeldstelle/anzeigenerstattung/">https://www.berlin.de/polizei/aufgaben/bussgeldstelle/anzeigenerstattung/</a></li> |
|
</ul> |
|
<ol> |
|
<li> |
|
<strong>Anzeigende/Anzeigender = Zeuge/Zeugin:</strong> |
|
<p> |
|
<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"> |
|
</p> |
|
<ul> |
|
<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>) |
|
und ggf. auch zu einem Erscheinen vor Gericht verpflichtet bin (<a href="https://dejure.org/gesetze/StPO/48.html">§ 48 StPO</a>).</li> |
|
<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> |
|
</ul> |
|
</li> |
|
<br> |
|
|
|
<li> |
|
<strong>Angaben zum Verkehrsverstoß:</strong> |
|
<p> |
|
<tt>(was) </tt><select name="Verkehrsverstoss"> |
|
<option>Halten</option> |
|
<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) </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> |
|
<option>(siehe Anmerkung*)</option> |
|
</select><br><tt>(wie) </tt><select name="Qualifizierung"> |
|
<option>ohne Behinderung</option> |
|
<option>mit Behinderung: ich musste anhalten</option> |
|
<option>mit Behinderung: ich musste ausweichen</option> |
|
<option>mit Behinderung: ich musste absteigen</option> |
|
<option selected="">mit Gefährdung: ich musste in den Fließverkehr ausweichen</option> |
|
</select> |
|
</p> |
|
<p><textarea name="weitereAngaben" rows="3" placeholder="optional: weitere Angaben (z. B. Kennzeichen, Typ, Farbe des Kfz; vorhandene Verkehrszeichen) oder *) Anmerkung zum Verstoß"></textarea></p> |
|
</li> |
|
|
|
<li> |
|
<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 (>3 min; >1 h; >3 |
|
h) sollte der zeitliche Abstand zwischen erstem und letztem Foto größer sein.</p> |
|
<div><input type="file" id="imgfiles" accept="image/jpeg" multiple="multiple" class="remove"><label for="imgfiles" class="remove">(1–6 Fotos)</label> |
|
</div> |
|
</li> |
|
|
|
<li class="remove"> |
|
<div id="sendMail" class="remove">Eine Mail mit den oben angezeigten Daten an <a href="mailto:[email protected]?Subject=Verkehrsordnungswidrigkeitenanzeige%20bei%20Halt-%20und%20Parkverst%C3%B6%C3%9Fen&Body=%5BBitte%20das%20ausgef%C3%BCllte%20Formular%20kopieren%20und%20hier%20einf%C3%BCgen%5D" title="Link zur E-Mail">[email protected]</a> (Bußgeldstelle der Berliner Polizei) vorbereiten.</div> |
|
</li> |
|
|
|
<li class="remove"> |
|
<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> |
|
</li> |
|
</ol> |
|
|
|
|
|
<script> |
|
// tell the embed parent frame the height of the content |
|
if (window.parent && window.parent.parent){ |
|
window.parent.parent.postMessage(["resultsFrame", { |
|
height: document.body.getBoundingClientRect().height, |
|
slug: "" |
|
}], "*") |
|
} |
|
|
|
// always overwrite window.name, in case users try to set it manually |
|
window.name = "result" |
|
</script> |
|
|
|
</body> |
|
</html> |