Address rename detection with Accept Rename tag-edit export, hover-to-toggle snap dots, cross-layer click fix, fix county street naming (Saint, County Road, Parkway), and keep OSM ids in address downloads

This commit is contained in:
zyphlar
2026-10-21 18:14:33 -07:00
parent b44ec0341f
commit 28550984be
6 changed files with 443 additions and 98 deletions
+19 -3
View File
@@ -50,11 +50,13 @@ def build_overpass_query(county_name, state_name, data_type="highways"):
# Addresses: include nwr so building ways and relations are captured too,
# but use "out center;" instead of "out geom;" so ways/relations return a
# single centroid rather than their full coordinate list — much smaller payload.
# "meta" adds each element's version, so the map viewer can export edits
# (e.g. fixing addr:street) to the existing element instead of replacing it.
if data_type == "addresses":
query = f"""[out:json][timeout:180];
area(id:{area_id})->.searchArea;
nwr["addr:housenumber"](area.searchArea);
out center;"""
out meta center;"""
return query
base_query = f"""[out:json][timeout:180];
@@ -145,9 +147,13 @@ def convert_to_geojson(overpass_data):
if element["type"] == "node":
if not element.get("tags"):
continue # Skip topology-only nodes (no tags); versions collected above
props = dict(element["tags"])
props["osm_id"] = element["id"]
props["osm_type"] = "node"
props["osm_version"] = element.get("version", 1)
feature = {
"type": "Feature",
"properties": element.get("tags", {}),
"properties": props,
"geometry": {
"type": "Point",
"coordinates": [element["lon"], element["lat"]]
@@ -177,10 +183,20 @@ def convert_to_geojson(overpass_data):
features.append(feature)
elif "center" in element:
# out center; — single centroid point (used for addresses on buildings)
# Node refs / members are kept so the element can be exported
# as a tag-only modify without re-downloading it.
c = element["center"]
props = dict(element.get("tags", {}))
props["osm_id"] = element["id"]
props["osm_type"] = element["type"]
props["osm_version"] = element.get("version", 1)
if "nodes" in element:
props["osm_nodes"] = element["nodes"]
if "members" in element:
props["osm_members"] = element["members"]
feature = {
"type": "Feature",
"properties": element.get("tags", {}),
"properties": props,
"geometry": {
"type": "Point",
"coordinates": [c["lon"], c["lat"]]