Blogposts tagged osmf.zz.dehttps://f.zz.de/tags/osm/f.zz.deikiwiki2024-03-03T13:30:01ZDeployment ranthttps://f.zz.de/posts/202403031411.deployment_rant/Florian Lohoff2024-03-03T13:30:01Z2024-03-03T13:11:40Z
<p>For a very long time i have been running a tasking manager 2 instance
for me and the regional community to fix and revalidate
stuff around here. TM2 had a very short and reliable documentation
and you could set it up in 5 Minutes without ANY deeper knowledge of
python, node or postgres.</p>
<p>I had been staying at TM2 as all newer versions failed
for me to build or deploy easily.</p>
<p>Today - another try - current git TM.</p>
<p>And it fails again.</p>
<p>It does not build on Debian/Bookworm as it is not compatibly
with python 3.11 which is the obvious default version on
Debian/Bookworm.</p>
<p>So fixing that in <strong>pyproject.toml</strong> and setting the</p>
<pre><code>requires-python = ">=3.11,<3.12"
</code></pre>
<p>And then running</p>
<pre><code>pdm lock --update-reuse
</code></pre>
<p>The documentation even misses the point in better creating a venv
which i obviously did beforehand.
<a href=""></a>
Then i have the backend installed and when you get the idea
that your postgres database needs the postgis extension enabled
and also change your <strong>TM_LOG_DIR=</strong> to something writeable (I dont have a /home/appuser)
you can populate your database with <strong>flask db upgrade</strong>.</p>
<p>Then going back to trying to build your frontend you need to make
sure to install <strong>yarnpkg</strong> on your system. Debian has a <strong>yarn</strong>
binary from <strong>cmdtools</strong> which is confusing at first.
Then replace all <strong>yarn</strong> executions by <strong>yarnpkg</strong>.</p>
<p>Then you get to the point where the frontend starts to build
and then horribly fails because of npm requirements
beeing outdated and failing to build with newer openssl
having fixed issues:</p>
<pre><code>Error: error:0308010C:digital envelope routines::unsupported
</code></pre>
<p>When you try to look for it people suggest to downgrade nodejs
which is:</p>
<blockquote><p>"We have fixed a security issue and your project does not build? Downgrade to a version pre-security-fix"</p></blockquote>
<p>WTF? This hipster tool bubble is so doomed.</p>
<p>As i am a sysadmin, C, C++ and perl programmer and not into JS, npm, yarn, nodejs,
react and whatever "modern tools" are beeing used, i stopped here once again.</p>
<p>And NO - docker is not the solution when the requirement is to downgrade to less secure
versions of the dependencies and just hide it away. How are you going to fix these
issues in your production environment other than ignoring it?</p>
Löcher im ALKIS Schleswig-Holstein https://f.zz.de/posts/202402221635.loecher_im_alkis_schleswig-holstein/Florian Lohoff2024-02-22T15:49:12Z2024-02-22T15:35:57Z
<p>Nachdem ich aus dem OpenData Portal für Schleswig-Holstein ~17000 Dateien
gezogen habe und das ALKIS lokal in einer PostGIS wieder zusammengepuzzelt habe
fällt auf das es spannende Löcher im ALKIS gibt.</p>
<p>So sind die militärischen Flughäfen Jagel und Husum-Schleswig nicht im ALKIS
Export mit vorhanden. Aber es ist mitnichten so das alle militärischen Anlagen
ausgenommen sind. So ist die "Wehrtechnische Dienststelle 71" in Kiel
komplett vorhanden.</p>
<p><a href="https://f.zz.de/media/202402221635.loecher_im_alkis_schleswig-holstein.jagel.png"><img src="https://f.zz.de/posts/202402221635.loecher_im_alkis_schleswig-holstein/320x-202402221635.loecher_im_alkis_schleswig-holstein.jagel.png" width="320" height="276" class="img" /></a></p>
<p>Jedenfalls habe ich jetzt einen Hausumring export und kann das Alkisdiff SHS produzieren:</p>
<p><a href="https://osm.zz.de/dbview/?db=alkisdiff-shs&layer=buildingnotinosm#54.4581,9.52897,15z">https://osm.zz.de/dbview/?db=alkisdiff-shs&layer=buildingnotinosm#54.4581,9.52897,15z</a></p>
Micromapping will kill OpenstreetMaphttps://f.zz.de/posts/202401232206.micromapping_will_kill_openstreetmap/Florian Lohoff2024-01-23T21:29:02Z2024-01-23T21:06:15Z
<p>I have been with OpenstreetMap for 15 years. I started with an empty white
nothing and early decided on mapping in a very systematic way like "All
maxspeeds", "all building", "all traffic lights" and did that early with tools
like Mapillary by first making Photos of all streets.</p>
<p>I also started using the data for civil engineer planning for Telecom
infrastructure. For traffic simulations and other interesting purposes.</p>
<p>For 10 years i am running Quality Assurance for routing by calculating
~250k routes every 30 Minutes and watch for temporal changes in those routes.</p>
<p>So i guess i have a deep understanding of tagging schema. I think in
hierarchies and dependencies of objects and their tagging.</p>
<p>Lately (for the past couple of years) i see people in for example Germany
going into Micromapping. Every little stone, hedge, light, knob or straw needs
to be mapped in extreme detail. Per se i dont see a problem in that undertaking.</p>
<p>The problem that now arises all over the place is that established tagging
schemata are getting "abused". For whatever reason half-way usable tags are
beeing re-used for micromapping for "physically similar" objects although these
objects have a completely different sematic meaning.</p>
<p>This post was motivated by the abuse of <strong>highway=traffic_lights</strong>. Pure pedestrian
crossings have been described with a <strong>highway=crossing</strong> <strong>crossing=traffic_lights</strong>
for ages. Now people start to map additional <strong>highway=traffic_lights</strong> at every
simple pedestrian crossing. So we went from a simple node to a node triplet with
additional <strong>highway=traffic_lights</strong>.</p>
<p>As these 2 crossing types have completely seperate semantic properties this
makes whole crossings indistinguishable from pure pedestrian crossings.</p>
<p>As routing profiles make use of these different semantic properties in estimating
the delay of a traffic light this basically breaks these estimations, and worsens
routing.</p>
<p>Turning on to a discussion on <em>why</em> people start doing that always ends in</p>
<blockquote><p>the data consumer should fix his software</p></blockquote>
<p>without really explaining how people are going to put a tangent to a point. Once
removed information can not be brought back.</p>
<p>As a resume:</p>
<blockquote><p>Micromapping by abusing existing tags breaks semantic meaning of data.</p></blockquote>
<p>I think in the long run this "mapping for the renderer" and missing thinking in
semantic meaning will "kill" Openstreetmap, or better, reduces the data usability
for something else than a "pretty, colourful map".</p>
<p>I also think think this attitude of "somebody else must fix it" is also the best
argument for the existence of Overture Maps.</p>
RouteQA: Check your barriershttps://f.zz.de/posts/202312281633.routeqa_check_your_barriers/Florian Lohoff2023-12-28T15:35:59Z2023-12-28T15:33:47Z
<p>When putting in barriers like this <strong>barrier=bollard</strong> you might want
to go back and check the routing.</p>
<p>In this case at least we as OpenStreetmap using OSRM send
through traffic through this farmyard.</p>
<p><a href="https://f.zz.de/media/202312281633.routeqa_check_your_barriers.rhede-kempersweg.jpg"><img src="https://f.zz.de/posts/202312281633.routeqa_check_your_barriers/320x-202312281633.routeqa_check_your_barriers.rhede-kempersweg.jpg" width="319" height="191" class="img" /></a></p>
Why lanes and lane_markings matter a lothttps://f.zz.de/posts/202312281133.why_lanes_and_lane_markings_matter_a_lot/Florian Lohoff2023-12-28T11:08:56Z2023-12-28T10:33:39Z
<p>I am currently extending my RouteQA slowly around Northrhine-Westfalia
in Germany. I now extend to areas where mappers extensively mapped
<strong>lanes=1</strong> instead of <strong>lane_markings=no</strong> which breaks routing in a lot
of subtle little ways at least for OSRM.</p>
<p><strong>lanes=1</strong> means it is not possible for two way traffic to pass each other
without going to the curbs or shoulder. This causes the default OSRM car
profile to assume half the average speed of the maxspeed.</p>
<p>So a road with <strong>maxspeed=50</strong> and <strong>lanes=1</strong> without any oneway tagging
is assumed to have a max average speed of no more than 25km/h.
Thats a pretty good assumption if its really too narrow.</p>
<p>Now if you have a tertiary or better road in city limits with
a maxspeed of 50, and a parallel road with 30km/h the smaller
side roads suddenly is faster because 30km/h is better than 25km/h.</p>
<p>So <em>please stop</em> tagging <strong>lanes=1</strong> for roads which are wide enough for
passing traffic without getting into each others way. The correct
tag is <strong>lane_markings=no</strong></p>
<p>In the default OSRM profile <strong>lane_markings=no</strong> has no penalty at all
which IMO also needs fixing which why i opened
an <a href="https://github.com/Project-OSRM/osrm-backend/issues/6712">issue for the OSRM backend</a></p>
<p>Nevertheless - be careful with <strong>lanes=1</strong> - its a hefty penalty for
routing.</p>
<p>This is an example of broken routing in Borken near the Dutch border
from my QGis view on the RouteQA.</p>
<p>As one can see the Butenwall is used but also the parallel Wallstraße. The
Wallstraße would be used in ALL cases if it would not be a oneway.</p>
<p>The Butenwall as a secondary should be MUCH better - but it (was) tagged
with lanes=1 as there are no lane markings. As a secondary it
is wide even for trucks to pass each other without issues.</p>
<p><a href="https://f.zz.de/media/202312281133.why_lanes_and_lane_markings_matter_a_lot.borken-butenwall.jpg"><img src="https://f.zz.de/posts/202312281133.why_lanes_and_lane_markings_matter_a_lot/320x-202312281133.why_lanes_and_lane_markings_matter_a_lot.borken-butenwall.jpg" width="320" height="218" class="img" /></a></p>
Routing: When extensive tagging is still not enoughhttps://f.zz.de/posts/202312132046.routing_when_extensive_tagging_is_still_not_enough/Florian Lohoff2023-12-13T20:31:44Z2023-12-13T19:46:24Z
<p>In my RouteQA initiative i mostly care about temporal changed routes,
e.g. routes which change because mappers make changes to the map data.
I try to catch mistakes early e.g. reversed oneways, broken turn
restrictions, access restriction and the like.</p>
<p>When i add "clusters" e.g. areas i check routes within, i also try to fix
the most obvious routing mistakes e.g. shortcuts or rat-race roads.
Almost all cases are caused by sparse tagging. Mappers focus
on the higher class roads which carry extensive tagging about
<strong>maxspeed</strong>, <strong>lanes</strong>, <strong>lane_markings</strong>, <strong>surface</strong> and the like. All
the small side or rough roads lack these information and suddenly
the side roads are mathematically better. This is probably true for
a single vehicle, but considering we direct most of traffic to these
smaller roads these roads will never cope with the traffic we send.</p>
<p>The first thing is that i fix the sparse tagging by iterating on the side roads
and fill the gaps. In 98% of the cases this will fix shortcuts or rat-race
issues. But there are hard to fix cases i up to now had no clue how to fix.</p>
<p>I started a thread on
<a href="https://lists.openstreetmap.org/pipermail/osrm-talk/2023-December/002076.html">osrm-talk</a>
and the routing mailinglists which basically returned "unfixable", "you need to
fix the engine", "the side road is better so what", "this is easy" or "unfixable
without mobility or live data".</p>
<p>I don't buy the "mobility or live" data as thats not for hobbyists, or non
profits. You need money to buy and its a huge undertaking to process
that huge stream of data.</p>
<p>The other options are assuming "something magic happens".</p>
<p>So i sat down and made a "Proof of concept" inventing a tag for customizing the
route weight and using that in an OSRM profile.</p>
<p>The tag i used is <strong>route_weight_factor:motor_vehicle</strong> which shall contain a
float from <strong>-0.8</strong> to <strong>+0.8</strong>.</p>
<p>This then will be multiplied with the calculated weights from the physical tags
like <strong>lanes</strong>, <strong>lane_markings</strong>, <strong>maxspeed</strong>, road class etc.</p>
<p>So a <strong>-0.8</strong> means we go down to 20% of the speed of the road.</p>
<p>Here is the git commit for the car profile change:</p>
<p><a href="https://github.com/Project-OSRM/osrm-backend/commit/c199019fefc8b0d31e45a6599c0a7f1343af2cfe">https://github.com/Project-OSRM/osrm-backend/commit/c199019fefc8b0d31e45a6599c0a7f1343af2cfe</a></p>
<p>This enables to fix issues like this:</p>
<p><a href="https://f.zz.de/media/202312132046.example.png"><img src="https://f.zz.de/media/202312132046.example.png" width="640" height="393.103448275862" class="img" /></a></p>
<p>The small side-road is barely wide enough to fit a car. Sending 2 way traffic
through there is definitely not an option. There is no legal restriction so we
cant really exclude it. So we need want to make it worse than the way around.</p>
<p>It shows on how mappers would be able to influence and fix routing in case
something like this would get an established tagging.</p>
<p>Also it would allow us to respond to public bodys e.g. city councils
asking for routing changes in OpenStreetMap.</p>
Geometry antipattern: Background fillinghttps://f.zz.de/posts/202312041424.geometry_antipatter_tree/Florian Lohoff2023-12-04T13:44:01Z2023-12-04T13:24:20Z
<p>Continuing the OpenstreetMap antipattern blogpost series here is another one.</p>
<p>This is a <strong>single</strong> landuse, spanning 12km. It follows streets in
a tree like shape.</p>
<p>As for the obvious, this kind of landuses are prone to break. People tag highway tags on them,
move them around by accident, and as they ALWAYS span more than your edit area nobody really
is brave enough to do something with them. So this way/landuse stayed in the Database for 12 years,
despite beeing semantically nonsense.</p>
<p>In this case we have a <strong>landuse=grass</strong> which is in itself a broken tagging as its not a use in itself.
The Wiki article about <a href="https://wiki.openstreetmap.org/wiki/Tag:landuse%3Dgrass">landuse=grass</a> tells
you that most likely your tagging is wrong and you should use something else.</p>
<p>In this case the mappers intention was to not let any gap show up on the map between roads
and landuses. We know about mappers glueing landuses to roads which is a semantic error in
the OSM dataset as linestring object do not have a dimension as areas do have. This is another
hack to eliminate the gaps between roads and adjacent landuses.</p>
<p>Nevertheless this is broken. The road itself is never a landuse=grass, its not even
a landcover=grass, its tarmac or asphalt. Adjacent to the road there are the shoulders,
which may carry grass from time to time, or a ditch which has grass on its banks.</p>
<p>Concerning the tracks, these carry a surface tag themselves so this landuse
just trys to map for the renderer to get gaps in the background of the map
closed.</p>
<p>So the antipattern is to not hack OSM data to do background filling. Not with glueing
landuses to linestring objects, not by filling these with huge landuses as a last resort.</p>
<p>As long as we dont have a language/tags to fully describe road areas (which the shoulder
and the ditch belong to) we should not hack around and fake objects to close gaps.</p>
<p><a href="https://f.zz.de/media/202312041424.geometry_antipatter_tree.way122767797treelanduse.png"><img src="https://f.zz.de/posts/202312041424.geometry_antipatter_tree/800x-202312041424.geometry_antipatter_tree.way122767797treelanduse.png" width="799" height="401" class="img" /></a></p>
10 years OSM routing quality assurancehttps://f.zz.de/posts/202310111239.10_years_osm_routing_quality_assurance/Florian Lohoff2023-10-11T10:43:19Z2023-10-11T10:28:44Z
<p>As a surprise i today found out that its 10 years since i started
doing routing quality assurance:</p>
<pre><code>routeqa=> select min(osmdbtimestamp) from route;
min
---------------------
2013-05-28 08:00:00
</code></pre>
<p>So i started automatically calculating routes every 1-2 hours in May
2013 ... I now have 483525 individual routes in the database, so geometries
which are "unique" and have shown up over the last 10 years.</p>
<p>I started with a small cluster, just 20 nodes in my hometown which i monitored
for changes.</p>
<p>Over the years most of "Ostwestfalen-Lippe" a part of Northrhine-Westfalia
in Germany was added.</p>
<p>Currently i monitor routes between >1500 locations in 61 clusters. So every
1-2 hours i check for changes in those routes.</p>
<pre><code>Total routes calculated 46064 in 820 seconds 56.18/s
</code></pre>
<p>As the locations are selected by hand using QGis, its a tedious task to
add them to the database. And sometimes you have a location pair
which has multiple routes with equal travel time so they start
flapping on every calculation. So it takes maintenance every week to keep
going. Every other day you search for changes where somebody broke
something by accident, mostly turn restrictions, sometimes road deletes,
wrong taggings or the like.</p>
<p>This is just some random image/link i get when something changes. Here you see
a fix of mine, taking care that through traffic stays on the higher class roads.</p>
<p><a href="https://f.zz.de/media/202310111239.10_years_osm_routing_quality_assurance.through.png"><img src="https://f.zz.de/posts/202310111239.10_years_osm_routing_quality_assurance/320x-202310111239.10_years_osm_routing_quality_assurance.through.png" width="320" height="199" class="img" /></a></p>
<p>So .. Happy birthday ...</p>
Routing bei absenken der Regelgeschwindigkeithttps://f.zz.de/posts/202302241338.routing_bei_absenken_der_regelgeschwindigkeit/Florian Lohoff2023-02-24T12:55:03Z2023-02-24T12:38:30Z
<p>Es gibt ja so die Idee das in Deutschland die Regelgeschwindigkeit absenken könnte. D.h. durch
einen einfachen Trick in der StVO einfach 30km/h statt 50km/h hinter dem Ortsschild anordnet. Das
ganze geht natürlich im ersten Schritt komplett ohne neue Beschilderung.</p>
<p>Hört sich in der Theorie total super an um der "Vision Zero" näher zu kommen, nur was heisst
das für das Routing/Navigation.</p>
<p>Der erste Punkt ist das ja schon alles was es an Wohngebieten gibt heute schon mit einer Zone 30
oder dem Verkehrsberuhigten Bereich mit Zeichen 325 versorgt ist. D.h. aktuell sind nur noch
die höherwertigen Straßen, Arterien oder Magistralen überhaupt noch schneller zu befahren.</p>
<p>Aber was passiert wenn wir das ändern?</p>
<p>Naja - Das kann eigentlich jeder zuhause ausprobieren und mal z.b. mit OSMAnd von "Schnellste Route"
auf "Kürzeste route" umstellen.</p>
<p>Denn wenn alle Straßen "gleich schnell" sind dann zählt nicht mehr die Geschwindigkeit sondern nur
noch die Distanz. Mit der Folge kommt es dann dazu das das routing sich weiträumig verändert. Auch
bisher für das Routing uninteressante Wohngebiete sind mitunter jetzt kürzer und damit schneller.
D.h. der Verkehr wird sich von den Magistralen in die Wohngebiete verlagern.</p>
<p>Um das zu demonstrieren hab ich einen "Live routenvergleich" gebaut der mit dem jeweilig identischen
Datensatz arbeitet, jedoch die Regelgeschwindigkeit von 50 absenkt.</p>
<p>Hier ein erstes Ergebnis. Route vorher ist "grün". Router hinterher ist "rot".</p>
<p>Wie kommt es jetzt zu dieser Routingänderung?</p>
<p>Der Nordring ist mit Tempo 70 Beschildert. D.h. hier würden die Geschwindigkeiten weiter gelten. Dadurch
gewinnt der natürlich deutlich an Priorität und zieht noch mehr Verkehr an. Die Arterien wie
Marienfelder Straße innerhalb des Rings, oder die Bismarckstraße verlieren an Bedeutung.</p>
<p>Der nächste Versuch ist den Nordring auch auf Tempo 30 abzusenken.</p>
<p><a href="https://f.zz.de/media/202302241338.routing_bei_absenken_der_regelgeschwindigkeit.regelgeschwindigkeit.png"><img src="https://f.zz.de/posts/202302241338.routing_bei_absenken_der_regelgeschwindigkeit/320x-202302241338.routing_bei_absenken_der_regelgeschwindigkeit.regelgeschwindigkeit.png" width="320" height="195" class="img" /></a></p>
Tagging the default - oneway=nohttps://f.zz.de/posts/202301222237.tagging_the_default_-_oneway_no/Florian Lohoff2023-01-22T21:39:58Z2023-01-22T21:37:02Z
<p>I had a look at some QA output of mine which analyses tagging on
ways like lanes, turn:lanes etc and i found TONs of <strong>oneway=no</strong>
tagging.</p>
<p>I initially assumed these were some rouge users starting to sprinkle
<strong>oneway=no</strong> everywhere and started to comment on the changesets.</p>
<p>After i while i discovered these were "StreetComplete" users.</p>
<p>So StreetComplete once again started to get users into tagging
wide spread defaults on roads with ANY consent of the wider community.</p>
Geometry mapping antipattern: landuse=snakehttps://f.zz.de/posts/202212221540.geometry_mapping_antipattern_landuse_snake/Florian Lohoff2022-12-22T14:59:10Z2022-12-22T14:40:41Z
<p>No. 2 of my antipatterns: "Landuse drag". Mappers seem to have the tendency to
make little small pieces into one large, huge, even gigantic object. So they
start dragging the landuse (and other objects) further and further along a
road, across a road or whatever. The resulting object then rather looks like a
very long snake following some arbitrary other object.</p>
<p>These snake like objects, or huge objects have the tendency to break pretty
regular. More complexity is a unavoidable consequence by suddenly you are in
the need of <strong>multipolygon</strong> relations, or unexperienced mappers accidentally
break the object.</p>
<p>So - With landuse its like with all others things in life - Keep it simple and stupid.</p>
<p>See this example where someone tried to include the 4 trees on the other side
of the road into the MUCH larger forest area. The falsely included area of the
streets outweights by far the correctly included area. The other problem is
that the boundaries of the landuse now do not follow visible contrast in the
aerial imagery. Very confusing.</p>
<p><a href="https://f.zz.de/media/202212221540.geometry_mapping_antipattern_landuse_snake.forestwithdop.png"><img src="https://f.zz.de/posts/202212221540.geometry_mapping_antipattern_landuse_snake/200x-202212221540.geometry_mapping_antipattern_landuse_snake.forestwithdop.png" width="200" height="145" class="img" /></a></p>
<p>Another example is this. Landuse is beeing dragged along a street, making the
<strong>landuse=residential</strong> a backdrop of the street. It includes the full streets
width although only one side really contains residential usage. The south-east
part should really be its own landuse stopping at the shoulder of the street.
Again the abuse of landuse to try to make a "gapless" map makes these
geometries a lot more complex than they need to be.</p>
<p><a href="https://f.zz.de/media/202212221540.geometry_mapping_antipattern_landuse_snake.followthestreet.png"><img src="https://f.zz.de/posts/202212221540.geometry_mapping_antipattern_landuse_snake/200x-202212221540.geometry_mapping_antipattern_landuse_snake.followthestreet.png" width="200" height="215" class="img" /></a></p>
<p>The last example for today is this. Dragging the landuse across a huge
intersection, just to include the 4 other building on the other side. This
includes more area used for traffic than it includes real residential area.
Again the perimeter of the landuse does not follow any visible contrast
boundary in the aerial imagery, crossing the roads in absurd and completely
random angles.</p>
<p><a href="https://f.zz.de/media/202212221540.geometry_mapping_antipattern_landuse_snake.hugeintersection.png"><img src="https://f.zz.de/posts/202212221540.geometry_mapping_antipattern_landuse_snake/200x-202212221540.geometry_mapping_antipattern_landuse_snake.hugeintersection.png" width="200" height="163" class="img" /></a></p>
<p>So to summarize: Landuses should follow stuff you can actually see in an
aerial. They should not erratically cross other objects or include other
objects/area which are not represented by this landuse. Landuses are not a
"backdrop" behind streets just to make the map "gapless".</p>
<p>If it gets to complicated, split it into smaller chunks.</p>
Geometry mapping antipattern: Keep lefthttps://f.zz.de/posts/202212211146.geometry_mapping_antipattern_keep_left/Florian Lohoff2022-12-21T10:58:59Z2022-12-21T10:46:33Z
<p>For some time i was thinking about making a blog post series about geometry mapping antipattern
which i find often in our dataset. So here we come with No. 1. "Keep Left"</p>
<p>Have you ever wondered why you get stray "Keep left", "Keep right" announcements from
your navigational system although you are on a straight road cruising ahead?</p>
<p>It because of <strong>geometry</strong>. All announcements concerning the driving direction are direct
causes of the street geometry. So when you get an announcement, have a look at the geometry.</p>
<p>One of the issues is <strong>sharp angle</strong> intersections. The navigation sees it as a road "split" so it
tells you which of the two ways you need to take.</p>
<p>But lets have a look at an example intersection i found within 30 seconds.</p>
<p><a href="https://f.zz.de/media/202212211146.geometry_mapping_antipattern_keep_left.before.png"><img src="https://f.zz.de/posts/202212211146.geometry_mapping_antipattern_keep_left/160x-202212211146.geometry_mapping_antipattern_keep_left.before.png" width="160" height="165" class="img" /></a></p>
<p>You see - the side road joining into the <em>tertiary</em> goes in a straight line into the main road. But is
it really at this angle? Lets have a look at the aerial photo:</p>
<p><a href="https://f.zz.de/media/202212211146.geometry_mapping_antipattern_keep_left.beforewithdop.png"><img src="https://f.zz.de/posts/202212211146.geometry_mapping_antipattern_keep_left/160x-202212211146.geometry_mapping_antipattern_keep_left.beforewithdop.png" width="160" height="170" class="img" /></a></p>
<p>You can easily see that taken the rough direction of the road the intersection is correct. But are you actually merging like this into
a busy main road? Typically not. You stop nearly at 90° to the main road to have clear sight
into both directions. And when you take a very close look at the roads area you'll see a <strong>trumpet like</strong>
widening of the road for the vehicles to stop at 90°.</p>
<p>So when following the center line of the road, and on the last 10m we follow the center line of the trumpet
we suddenly see a 90° intersection show up.</p>
<p>See this example. The grey area shows your asymmetric trumpet like area, and the yellow line shows
the real center line of your road.</p>
<p><a href="https://f.zz.de/media/202212211146.geometry_mapping_antipattern_keep_left.afterwithdop.png"><img src="https://f.zz.de/posts/202212211146.geometry_mapping_antipattern_keep_left/160x-202212211146.geometry_mapping_antipattern_keep_left.afterwithdop.png" width="160" height="123" class="img" /></a></p>
<p>So when drawing simple intersections like this, most likely in the countryside, have a closer look and try
to maintain a half way 90° Angle. If you hear stray announcements. Remember the position and have a look
at the geometry.</p>
josm plbuildings for Northrhine-Westfaliahttps://f.zz.de/posts/202210270944.josm_plbuildings_for_northrhine-westfalia/Florian Lohoff2022-10-27T07:55:37Z2022-10-27T07:44:14Z
<p>For a long time building imports in Northrhine-Westfalia or
NRW was a hassle. The only source would be a WMS server and
some people <a href="https://wiki.openstreetmap.org/wiki/DE:JOSM/Plugins/Tracer2">wrote software</a> to convert the WMS tiles back to
some useful vector informations and merge into the josm dataset.
This solution was pretty fragile and my impression is that its
basically unmaintained, although it still works for me.</p>
<p>For a long time i was looking for a solution to use something
like generic WFS in JOSM with a rule based merging of tags
and or geometries (Which geometries to use nodes from,
snap distance etc). Nothing like this popped up in the last
10 years.</p>
<p>So i had a look yesterday and found the <a href="https://github.com/praszuk/josm-plbuildings-plugin">plbuildings</a> plugin
which just needs the right server component to serve OSM XML files.</p>
<p>So i quickly hacked a server component to server the NRW Open Data
Shape dataset.</p>
<p>When you install the plbuildings plugin into josm, and change the URL to:</p>
<pre><code>plbuildings.server_url=https://osm.zz.de/plbuildingsnrw/v1/
</code></pre>
<p>You will be able to import building outlines from the <a href="https://www.opengeodata.nrw.de/produkte/geobasis/lk/akt/hu_shp/">Hausumringe NRW</a>
dataset. I am not that happy with the amount of nodes this dataset contains,
or the usability with the <em>plbuildings</em> plugin, but its a start.</p>
<p>Also this will most like break horribly if you have real multipolygon buildings
e.g. with a hole in the middle. This is not yet implemented at least on the server
side as it would require to serve back a relation. I have no idea whether the plbuildings
plugin supports this.</p>
Postgis in multiple schemahttps://f.zz.de/posts/202210051030.postgis_in_multiple_schema/Florian Lohoff2022-10-05T08:48:54Z2022-10-05T08:30:19Z
<p>Restoring the very same dump into multiple schemas is not that easy
when using postgis. Typically a pg_dump contains <strong>public.geometry</strong>
when creating the tables which is not reachable as postgis will be in
a different schema at least on the second import.</p>
<p>First create a different schema for the postgis extension</p>
<pre><code>create schema postgis;
create extension postgis with schema postgis;
</code></pre>
<p>Then set the search path for non schema qualified postgis functions
to be found:</p>
<pre><code>alter database joineddb SET search_path TO public,postgis;
</code></pre>
<p>Then feed your psql dumps into psql using sed. This import will end
up in the public schema:</p>
<pre><code>zcat "dump-with-postgis-new.sql.gz" \
| sed -e 's/public.geometry/postgis.geometry/ig'\
| psql -f - joineddb
</code></pre>
<p>Then connect to the database and rename schema:</p>
<pre><code>alter schema public rename to new;
create schema public;
</code></pre>
<p>And import the second file:</p>
<pre><code>zcat "dump-with-postgis-old.sql.gz" \
| sed -e 's/public.geometry/postgis.geometry/ig'\
| psql -f - joineddb
</code></pre>
<p>Now you have both dumps in the database for comparison.</p>
E-Scooter Mapillaryhttps://f.zz.de/posts/202205171455.e-scooter_mapillary/Florian Lohoff2022-05-18T14:11:51Z2022-05-17T12:55:36Z
<p>After i went mapping with a <a href="https://f.zz.de/posts/201404181623.mapillary__diy_stretview/">mast on the car</a>, <a href="https://f.zz.de/posts/201508211217.mapillary_setup_redesign/">using a bike</a> or mounting
it to the <a href="https://f.zz.de/posts/202005281554.mapillary_setup_renew/">Mercedes star on the hood</a> with a suction cup i now tried
using share electro scooters. Extends range a bit but is not as manouverable
as a bike. Still one can map ~30km roads with a single charge.</p>
<p><a href="https://f.zz.de/media/202205171455.e-scooter_mapillary.0.jpg"><img src="https://f.zz.de/posts/202205171455.e-scooter_mapillary/320x-202205171455.e-scooter_mapillary.0.jpg" width="320" height="240" class="img" /></a>
<a href="https://f.zz.de/media/202205171455.e-scooter_mapillary.1.jpg"><img src="https://f.zz.de/posts/202205171455.e-scooter_mapillary/320x-202205171455.e-scooter_mapillary.1.jpg" width="320" height="240" class="img" /></a>
<a href="https://f.zz.de/media/202205171455.e-scooter_mapillary.2.jpg"><img src="https://f.zz.de/posts/202205171455.e-scooter_mapillary/320x-202205171455.e-scooter_mapillary.2.jpg" width="320" height="240" class="img" /></a>
<a href="https://f.zz.de/media/202205171455.e-scooter_mapillary.3.jpg"><img src="https://f.zz.de/posts/202205171455.e-scooter_mapillary/320x-202205171455.e-scooter_mapillary.3.jpg" width="320" height="240" class="img" /></a></p>
Use OSM routinghttps://f.zz.de/posts/202201302055.use_osm_routing/Florian Lohoff2022-01-30T20:02:20Z2022-01-30T19:39:41Z
<p>The last <a href="https://weeklyosm.eu/archives/15308">Weekly News</a> mentioned <a href="https://www.facebook.com/groups/OpenStreetMap.TW/posts/4905803666151730/">a warning</a> not to use OSM as the only
truth in routing.</p>
<p>I must disagree here. OSM focussed on a "nice map" for the last decade
producing a nice visual appearance. So we focused on tagging for the renderer.
For the average mapper thats a pretty tight feedback loop be having the
result for their doing within minutes so the result was fine tuned in a lot
of simple, small, incremental steps.</p>
<p>Routing is a much more complex beast and basically a 2nd tier usage. It takes
much longer to show differences and a lot of times its a black box for
the average mapper.</p>
<p>There are multiple issues here:</p>
<ul>
<li>There is basically no documentation on which tags influence routing for
what engine. (access=private, lanes=, maxspeed, width etc)</li>
<li>There is very little knowledge about geometry influencing "Announcements" in routing</li>
<li>Feedback loop is much longer as routing graphs are not rebuild within minutes but rather weeks to months</li>
<li>Changes can not be experienced visually</li>
<li>There are no good QA tools for routing changes</li>
</ul>
<p>So there is no real feedback loop for the average mapper to fix, tune or
even enable routing.</p>
<p>The only way to actually make routing in OSM usable is by using it. On a daily
base and fixing up "Broken announcements" and non optimal routing.</p>
<p>The more people actually use it and report back errors, the better the map gets.</p>
<p>For a very small area in OSM i am actually monitoring routing using OSRM.
So every 2 hours i calculate 10th of thousands of routes between manually
selected lat/lons and alert about changes in time/distance. This is not
something which is scalable to the planet but at least it keeps this
spot "error free".</p>
<p>Output looks like this - So i get the old and the new route. In this case
routing changed to go through town instead of around it which is definitly
wrong:</p>
<p><a href="https://f.zz.de/media/202201302055.use_osm_routing.20220130-routingtelgte.png"><img src="https://f.zz.de/posts/202201302055.use_osm_routing/320x-202201302055.use_osm_routing.20220130-routingtelgte.png" width="319" height="237" class="img" /></a></p>
<p>There is a lot of room for improvement. Currently you get links for visually
inspecting old and new route. A way to improve would be to geometrically
extract a bbox of change and match with changesets having modified that area.</p>
Long distance Addresses - Mehr Bundesländerhttps://f.zz.de/posts/202104141017.long_distance_addresses_-_mehr_bundeslaender/Florian Lohoff2021-04-14T09:04:35Z2021-04-14T08:17:50Z
<p>Vor 14 Tagen habe ich die Erreichbarkeitsanalyse für Adressen auf Brandenburg
und Schleswig-Holstein ausgeweitet und darüber <a href="https://f.zz.de/posts/202103301845.long_distance_addresses">geblogged</a>.</p>
<p>Auf Wunsch eines mappers jetzt auch für <a href="https://osm.zz.de/dbview/?db=addresses-mv&layer=routeable#53.85901,13.00781,9z">Mecklenburg-Vorpommern</a>, <a href="https://osm.zz.de/dbview/?db=addresses-by&layer=routeable#49.05092,11.5274,13z">Bayern</a> und
<a href="https://osm.zz.de/dbview/?db=addresses-th&layer=routeable#50.97572,11.61255,9z">Thüringen</a>.</p>
<p>D.h. Erreichbarkeit von Adressen, Adressvollständigkeit und Abweichungen zwischen <em>addr:postcode</em>
<em>Postcode Boundary</em> und Adresse bzw selbiges zur <em>Admin Boundary level 8</em> und dem <em>addr:city</em>.</p>
<p>(Oben mal auf "<a href="https://osm.zz.de/dbview">Back to database list</a>" klicken und die entsprechenden Database und Layer anwählen)</p>
<p>Hier ein schönes Beispiel aus der nähe von Waren an der Müritz:</p>
<p><a href="https://f.zz.de/media/202104141017.long_distance_addresses_-_mehr_bundeslaender.warenroutable.jpg"><img src="https://f.zz.de/posts/202104141017.long_distance_addresses_-_mehr_bundeslaender/320x-202104141017.long_distance_addresses_-_mehr_bundeslaender.warenroutable.jpg" width="320" height="257" class="img" /></a></p>
Long distance Addresseshttps://f.zz.de/posts/202103301845.long_distance_addresses/Florian Lohoff2021-03-30T16:52:44Z2021-03-30T16:45:00Z
<p>Weil es mich selber interessiert hat habe ich die Adress/Routing auswertung
auf <a href="https://osm.zz.de/dbview/?db=addresses-bb&layer=routeable#53.11551,13.55769,16z">Brandenburg</a> und <a href="https://osm.zz.de/dbview/?db=addresses-shs&layer=routeable#54.20375,9.35115,16z">Schleswig-Holstein</a> ausgeweitet.</p>
<p>Zu sehen ist die Adresse in OSM als Pin und die schwarze Linie die den
nächstgelegenen Punkt auf dem Routingfähigen Straßennetz (OSRM Car Profile)
anzeigt.</p>
<p>D.h. Wenn der User zur Adresse am "Pin" routed meldet die Navigationsengine bei
erreichen des Endes der Schwarze Linie ein <strong>"Sie haben das Ziel erreicht"</strong>.
Was natürlich nicht so schön ist wenn das die andere Seeseite oder durch eine
Bahnlinie getrennt ist.</p>
<p>Fehler sind zu 90% access restrictions die anstatt ein "permissive" oder
"destination" ein "no" enthalten oder ganz ohne Beschilderung vor Ort
nach "Gefühl" eingetragen wurden. Alternativ auch die falsche Nutzung
von "tracks". Ein <em>track</em> ist ein Weg der Überwiegend/Ausschliesslich für
die Landwirtschaft genutzt wird. Wenn eine Ferienhaussiedlung wie hier
existiert ist das kein <em>track</em> mehr sondern mind. ein <em>service</em>. Und
der Ausbauzustand ist nicht entscheidend. Dafür haben wir tags
wie <em>surface</em> oder <em>smoothness</em>.</p>
<p>Auch die Zufahrt zu einem Bauernhof ist kein track. Der Anwohnerverkehr überwiegt
hier um ein vielfaches.</p>
<p><a href="https://f.zz.de/media/202103301845.long_distance_addresses.brandenburg.jpg"><img src="https://f.zz.de/posts/202103301845.long_distance_addresses/320x-202103301845.long_distance_addresses.brandenburg.jpg" width="320" height="285" class="img" /></a></p>
Why am i doing this?https://f.zz.de/posts/202103161339.why_am_i_doing_this/Florian Lohoff2021-03-16T12:42:50Z2021-03-16T12:39:59Z
<p>After more than a decade Openstreetmap and mapping nearly 200 days a year and
doing tons of QA one sometimes has to step back and ask</p>
<blockquote><p>Why am i doing this?</p></blockquote>
<p>Today a friend of mine sent me this Photo of his new eMountainbikes Bosch
computer. They do a reachability analysis based on OpenStreetmap data and
battery level.</p>
<p>I am blown away by this ... Its such a great usage of OpenStreetmap data i have
been collecting day in and day out.</p>
<p>I love it.</p>
<p><a href="https://f.zz.de/media/202103161339.why_am_i_doing_this.signal-2021-03-16-131516_002.jpeg"><img src="https://f.zz.de/posts/202103161339.why_am_i_doing_this/480x-202103161339.why_am_i_doing_this.signal-2021-03-16-131516_002.jpeg" width="480" height="614" class="img" /></a></p>
Osmupdate failhttps://f.zz.de/posts/202102221129.osmupdate_fail/Florian Lohoff2021-02-22T10:34:21Z2021-02-22T10:29:13Z
<p>After the change in replication generation osmupdate started
to fail as the generated files to not contain and comment "#"
anymore which osmupdate uses to detect whether it got a file.
This is a quick hack disabling those checks.</p>
<pre><code>diff --git a/osmupdate.c b/osmupdate.c
index 7a55fc5..f9119e9 100644
--- a/osmupdate.c
+++ b/osmupdate.c
@@ -719,7 +719,7 @@ exit(1);
if(loglevel<2)
unlink(newest_timestamp_file_name);
#endif
- if(result[0]=='#') { // full status information
+ //if(result[0]=='#') { // full status information
// get sequence number
char* sequence_number_p;
sequence_number_p= strstr(result,"sequenceNumber=");
@@ -737,7 +737,7 @@ exit(1);
memcpy(result+13,timestamp_p+14,3);
memcpy(result+16,timestamp_p+18,4);
} // found timestamp line
- } // full status information
+ //} // full status information
changefile_timestamp= strtimetosint64(result);
if(loglevel>0) { // verbose mode
char ts[30];
@@ -825,7 +825,7 @@ static int64_t get_changefile_timestamp(
} // could open the file
// parse the timestamp information
- if(timestamp_contents[0]=='#') { // full status information
+ //if(timestamp_contents[0]=='#') { // full status information
// get timestamp
char* timestamp_p;
timestamp_p= strstr(timestamp_contents,"timestamp=");
@@ -839,7 +839,7 @@ static int64_t get_changefile_timestamp(
memcpy(timestamp_contents+13,timestamp_p+14,3);
memcpy(timestamp_contents+16,timestamp_p+18,4);
} // found timestamp line
- } // full status information
+ // } // full status information
changefile_timestamp= strtimetosint64(timestamp_contents);
if(loglevel>0) { // verbose mode
</code></pre>
Neue NRW Luftbilderhttps://f.zz.de/posts/202012160850.neue_nrw_luftbilder/Florian Lohoff2020-12-16T07:56:13Z2020-12-16T07:50:49Z
<p>Nachdem es ja für das Land Nordrhein-Westfalen neue Luftbilder aus 2020 gibt
lohnt es sich mal alles nochmal neu anzusehen und das alles noch so aussieht
wie es einst (2008-) gemapped wurde.</p>
<p>Freckenhorst wurde bisher eher stiefmütterlich behandelt, es gab keine
Landuses, Straßenlaternen, es fehlten jede menge Tracks, Geometrieen stammten
vielfach aus uralten Bing Bildern.</p>
<p>In den Tasking-Manager2 geworfen (Ja liebe HOT - Ich verstehe TM3/TM4 nicht
mehr und kriege die nicht so einfach aufgesetzt) und über 10 Tage nach und nach
abgearbeitet.</p>
<p><a href="https://f.zz.de/media/202012160850.neue_nrw_luftbilder.2020-12-16.freckenhorst-tm2.jpg"><img src="https://f.zz.de/posts/202012160850.neue_nrw_luftbilder/320x-202012160850.neue_nrw_luftbilder.2020-12-16.freckenhorst-tm2.jpg" width="320" height="201" class="img" /></a></p>
Update addressviewhttps://f.zz.de/posts/202007031435.update_addressview/Florian Lohoff2020-07-03T12:39:28Z2020-07-03T12:35:28Z
<p>In den letzten Tagen habe ich teile der Addressvalidierung überarbeitet.
U.a. gucke ich mir jetzt <strong>addr:housename</strong> an. Das das beliebige
Namen sein können ist es schwer hier fehler zu finden. In der Realität
sind 90% der namen leider kaputt und gehören eigentlich in ein
anderes Tag.</p>
<p>Offensichtliche Dinge im housename werden allerdings jetzt auch in Türkis
dargestellt.</p>
<p>Dazu gekommen ist auch ein vergleich zwischen Adressen auf Nodes (z.B. POIs)
und der Adresse auf dem Gebäudeoutline. Diese sollten übereinstimmen.
Fehler werden jetzt in Olivgrün dargestellt.</p>
<p>Hier die links zu den Verschiedenen Layern.</p>
<p><a href="https://osm.zz.de/dbview/?#addresses-bw">https://osm.zz.de/dbview/?#addresses-bw</a></p>
<p>Es werden derzeit Baden-Württemberg, Niedersachsen, Nordrhein-Westfalen,
Rheinland-Pfalz und Sachsen prozessiert.</p>
<p><a href="https://f.zz.de/media/202007031435.update_addressview.adresserror.png"><img src="https://f.zz.de/posts/202007031435.update_addressview/320x-202007031435.update_addressview.adresserror.png" width="320" height="274" class="img" /></a></p>
Postalische Eigenständigkeithttps://f.zz.de/posts/202007031256.postalische_eigenstandigkeit/Florian Lohoff2020-07-03T10:57:50Z2020-07-03T10:56:05Z
<p>Nur weil ich eben (mal wieder) einen Changeset reverten musste
von einem user der insgesamt 1458 Adressen in Marienfeld
auf <strong>addr:city=Harsewinkel</strong> geändert hat,
<a href="https://de.wikipedia.org/wiki/Marienfeld_(Harsewinkel)#Postalische_Eigenst%C3%A4ndigkeit_1987">hier nochmal der Hinweis</a>:</p>
<blockquote><p>Postalische Eigenständigkeit 1987
Vor der kommunalen Gebietsreform war die Gemeinde über die Postleitzahl „4831 Marienfeld“ zu erreichen. Ab dem 1. Januar 1973 wurde Marienfeld der Stadt Harsewinkel zugeordnet und die postamtliche Bestimmungsangabe änderte sich in „4834 Harsewinkel 2“. Auf Initiative des Heimatvereins konnte zum 1. August 1987 die postalische Eigenständigkeit zurückerlangt werden. In der Begründung des Bundespostministeriums ist zu lesen: Nur für sehr wenige Gemeindeteile von überragender historischer Bedeutung, mit denen sich weltweit kulturelle und soziale Werte eng verbinden, soll geprüft werden, ob ihre Ortsnamen vorab wieder als Bestimmungsortsangabe zugelassen werden können. Diese Angabe änderte sich deshalb in „4834 Marienfeld“. Das Postamt Gütersloh brachte zur Erinnerung ein Schmuckblatt mit Wappen, Klosterzeichnung, Briefmarke und dem Stempel des Tages 1. August 1987 heraus. Im Zuge der Postleitzahlenreform 1993 blieb die Ortsangabe „33428 Marienfeld“ erhalten.</p></blockquote>
NRW Opendata Hausumringe und Openstreetmaphttps://f.zz.de/posts/202006170946.nrw_opendata_hausumringe_und_openstreetmap/Florian Lohoff2020-06-17T07:52:06Z2020-06-17T07:46:52Z
<p>Die Bezirksregierung Köln veröffentlich seit einiger Zeit die Hausumringe für
Nordrhein-Westfalen als <a href="https://www.bezreg-koeln.nrw.de/brk_internet/geobasis/liegenschaftskataster/hausumringe/index.html">Shape file</a> als Opendata als CC0 bzw der
"Datenlizenz Deutschland – Zero" (dl-de/zero-2-0). Damit lassen sich da natürlich
einige dinge mit anstellen. Unter anderem ist ein Feld in dem Shape Metadaten was
die Gebäudefunktion nach ALKIS anzeigt. Damit lassen sich vergleiche mit OSM
erzeugen welche Gebäudeteile möglicherweise nicht richtig getagged sind.</p>
<p>Als Beispiel ist mir sofort die "Garage" eingefallen. D.h. Gebäude
die nach ALKIS ein 2463 ist sollte in OSM als <code>building=garage</code> oder
<code>building=garages</code> eingetragen sein. Ausserdem gibt es noch die Funktion
des Umformers, in OSM Deutsch eine <code>power=substation</code>.
Als Bonus gibt es noch den "Schuppen" bei OSM ein <code>building=shed</code>
wobei man hier sehr aufpassen muss. Nicht alles was im Amtsdeutsch
ein Schuppen ist sieht nach Gebäudeform auch nach Schuppen aus.</p>
<p>Hier der <em>bekannte</em> layer mit dem Fehlenden Gebäuden, Gebäudeteilen
oder allgemein Abweichungen vom ALKIS: <a href="https://osm.zz.de/dbview/?db=alkisdiff-nrw&layer=buildingnotinosm#51.77018,8.56635,17z">buildingnotinosm</a>
Und dem layer der Fehlklassifizierten Gebäude: <a href="https://osm.zz.de/dbview/?db=alkisdiff-nrw&layer=misclassified#51.9852,8.79118,17z">misclassified</a></p>
<p>Und wie immer - Nicht stumpf aus dem ALKIS übernehmen. Das ALKIS ist in vielen stellen nicht besser als
OSM, kann aber ein Indikator sein mal irgendwo genauer hinzuschauen.</p>
<p><a href="https://f.zz.de/media/202006170946.nrw_opendata_hausumringe_und_openstreetmap.alkisdiff.png"><img src="https://f.zz.de/posts/202006170946.nrw_opendata_hausumringe_und_openstreetmap/320x-202006170946.nrw_opendata_hausumringe_und_openstreetmap.alkisdiff.png" width="320" height="201" class="img" /></a></p>
Mapillary Setup renewhttps://f.zz.de/posts/202005281554.mapillary_setup_renew/Florian Lohoff2020-05-28T13:58:28Z2020-05-28T13:54:11Z
<p>After 6 years it was time to renew my Mapillary setup. Now switched
to a used Sony FDR X3000, capable of GPS and interval pictures. Together
with the remote view handset a near perfect setup.</p>
<p>Only the incapability to use large Micro SD cards is a little anoying.
Mount it based on RAM Mounts with a improvised setup for the bike and
a suction cup for the car. The strap does only secure the camera against the
suction cup to fail (Which id didnt until now - even at a 140km/h)</p>
<p>I am not mounting the cam on the windshield as then i'd have a lot of
the bonnet in the images.</p>
<p>Up to now a very pleasent setup.</p>
<p><a href="https://f.zz.de/media/202005281554.mapillary_setup_renew.IMG_20200528_132244.jpg"><img src="https://f.zz.de/posts/202005281554.mapillary_setup_renew/320x-202005281554.mapillary_setup_renew.IMG_20200528_132244.jpg" width="320" height="240" class="img" /></a>
<a href="https://f.zz.de/media/202005281554.mapillary_setup_renew.IMG_20200520_164200.jpg"><img src="https://f.zz.de/posts/202005281554.mapillary_setup_renew/320x-202005281554.mapillary_setup_renew.IMG_20200520_164200.jpg" width="320" height="240" class="img" /></a></p>
Seltene Hausnummerhttps://f.zz.de/posts/201912111219.seltene_hausnummer/Florian Lohoff2019-12-11T11:46:17Z2019-12-11T11:19:59Z
<p>Demnächst wohne ich dann</p>
<pre><code>1i, Gütersloh
</code></pre>
<p>Sollte reichen. Denn die Hausnummer 1i scheint es in
Gütersloh genau einmal zu geben. Google und OpenStreetMap
bekommen das jedoch nicht hin.</p>
<pre><code>addresses=# select count(*) from addr where plz in ( '33330', '33332', '33335', '33334' ) and hausnummer = '1i';
count
-------
1
(1 row)
</code></pre>
<p>Auch in den umliegenden Gemeinden wie Rietberg, Rheda-Wiedenbrück, Langenberg, Herzebrock etc gibts
die nicht. Selbst in PLZ 33* gibts nur diese eine 1i.</p>
<p>Ob das gut oder schlecht ist?</p>
access=private on drivewayshttps://f.zz.de/posts/201910152010.access_private_on_driveways/Florian Lohoff2019-10-15T18:37:50Z2019-10-15T18:10:04Z
<p>Just to get a glimpse on what happens when you spray access tags by feeling and
make driveways to tracks or make them unusable by adding an <strong>access=private</strong></p>
<p><a href="https://f.zz.de/media/201910152010.access_private_on_driveways.routeable-addresses-example.png"><img src="https://f.zz.de/media/201910152010.access_private_on_driveways.routeable-addresses-example.png" width="663" height="540" class="img" /></a></p>
<p>All people navigating/routing to addresses at "Zur Hohen Wand" will end up on
the parking lot of the restaurant, 600m away with a double track railway
inbetween.</p>
<p>This is simply matching OSM addresses with the OSRM nearest call to the
routable network.</p>
<p>I am calculating this view for some German Bundesländer:</p>
<ul>
<li><a href="https://osm.zz.de/dbview/?db=addresses-nrw&layer=routeable">Nordrhein-Westfalen</a></li>
<li><a href="https://osm.zz.de/dbview/?db=addresses-sn&layer=routeable">Sachsen</a></li>
<li><a href="https://osm.zz.de/dbview/?db=addresses-nds&layer=routeable">Niedersachsen</a></li>
<li><a href="https://osm.zz.de/dbview/?db=addresses-bw&layer=routeable">Baden-Württemberg</a></li>
</ul>
<p>And yes - I know ALL arguments that this can be fixed in the software
e.g. routers. But it hasnt. It hasnt been fixed for 12 years. And i
dont think this is a software problem. If someone says <strong>access=private</strong>
noone is allowed in. Not the postal service, not friends or the
school bus. You have explicitly told anyone not to go there. How
could a machine decide to ignore the mappers request.</p>
<h2>Tracks</h2>
<p>Tracks are not for everyday driving by car. So they are
excluded for the normal car routing graph which is correct.
Except - Someone sprays an access=permissive or something on
it and suddenly its available for a car.
Driveways to farmyards are NOT tracks. They are not dominantly
used for agricultural purposes. The amount of traffic for living
outweights by orders of magnitude. The postal services goes there,
the kids go to school. Friends come and go. People drive to work.
Tagging a driveway to a farm as an agricultural track makes
the farm unreachable for most of todays car routing engines in
their default settings.</p>
<h2>access tags</h2>
<p>Most commonly <strong>access=private</strong> on a <strong>highway=service</strong> with
<strong>service=driveway</strong> or some random other mixture. In 10 years
fighting this spraying of access tags i have only seen a <em>single</em> case
of a valid <strong>access=private</strong> on a driveway. And that sounded
more like - "You'll die if you continue here". Even as the UPS driver
i'd be frightened to go in there.
All others said that its "Private property" or the German version
"Privatweg". I am okay with that. service=driveway says exactly that.
So why do people spray "felt" access restriction on ways?
It contradicts the <a href="https://wiki.openstreetmap.org/wiki/Good_practice#Verifiability">Good Practice</a>
by only mapping what is verifiable and when there is no sign
"Keep of the lawn" there is no reason to invent restriction.</p>
<p>Yes i know - You all have seen nice profiles or settings where you
automatically convert an access=private into an access=destination, or
can allow a router to use a track. But thats not what the mapper said.
You are overriding the mappers decision</p>
10 days OSM forumhttps://f.zz.de/posts/201910151649.10_days_osm_forum/Florian Lohoff2019-10-15T14:56:20Z2019-10-15T14:49:24Z
<p>Pretty funny. I ignored the <a href="https://forum.openstreetmap.org">OSM Forum</a>
for a long time as i am a keyboard guy and i read my mails with mutt
and have pretty streamlined processes for consuming huge quantities of
mail.</p>
<p>Now i started reading and responding in the Forum.</p>
<p>It took less than 10 days (And 11 posts) in the Forum before the first
responded to a discussion with personal "accusation" in a for me hostile
language.</p>
<p>I didnt know the OSM Forum was that kind of hostile and fucked up place.</p>
Area hierarchy QA checkshttps://f.zz.de/posts/201810201524.area_hierarchy_qa_checks/Florian Lohoff2018-10-20T13:49:30Z2018-10-20T13:24:02Z
<p>For some time i was thinking about a check for hierarchy in areas. For example
the <code>amenity=parking</code> for a school should be completely within the surrounding
<code>amenity=school</code> and not cross the outer boundary.</p>
<p>I implemented the first checks which checks leisure and amenity for crossing
themselves or landuse/natural.</p>
<p>One of the huge error sources are <code>leisure=nature_reserve</code> which are basically
above everything else. IMHO they should not be a leisure but some type
of boundary relation. For now i excluded the nature_reserves as then
all nature reserves would be red.</p>
<p>Here is a very simple example as a cropped screenshot from josm. The <code>amenity=parking</code>
should either be completely within the surrounding <code>amenity=hospital</code> or
outside of that <code>amenity</code>.</p>
<p><a href="https://f.zz.de/media/201810201524.area_hierarchy_qa_checks.hierachyexample.jpg"><img src="https://f.zz.de/media/201810201524.area_hierarchy_qa_checks.hierachyexample.jpg" width="684" height="617" class="img" /></a></p>
<p>There are cornercases where this might not actually be correct but i
havent found that many yet.</p>
<p>The output of the checks is currently available for some German states e.g.
NRW, RLP, NDS, HE as the other landuse, natural and building overlaps checks
i am running.</p>
<p>Here is the example of the Hannover region:</p>
<p><a href="https://osm.zz.de/dbview/?db=landuseoverlap-nds&layer=hierarchy#52.38147,9.7296,12z">https://osm.zz.de/dbview/?db=landuseoverlap-nds&layer=hierarchy#52.38147,9.7296,12z</a></p>
maxspeed:source vs source:maxspeedhttps://f.zz.de/posts/201809171609.maxspeed_source_vs_source_maxspeed/Florian Lohoff2018-09-17T14:11:29Z2018-09-17T14:09:48Z
<p>I added maxspeed:source as an error (its source:maxspeed) to the
wayproblem analyzer. <a href="https://osm.zz.de/dbview/?db=wayproblems-nrw&layer=defaults#51.4386,7.90741,8z">Northrhine-Westfalia</a></p>
<p>Interestingly this slipped through for some months.</p>