Release v2.3 - Obsidian removed, rapport opgeslagen in MkDocs /root/mkdocs/docs/docs/Huizenjacht/
This commit is contained in:
+21
-38
@@ -2,11 +2,12 @@
|
||||
"""
|
||||
Adres Analyse - Rapport generator
|
||||
Gebruikt PDOK voor geocoding, ORS voor isochronen/routes en PostGIS OSM-data voor voorzieningen.
|
||||
Slaat rapport ook op in Obsidian vault (map: huizenjacht).
|
||||
Slaat rapport en HTML-kaarten op in /root/mkdocs/docs/docs/Huizenjacht/
|
||||
"""
|
||||
|
||||
import json
|
||||
import sys
|
||||
import os
|
||||
import urllib.request
|
||||
import urllib.parse
|
||||
import re
|
||||
@@ -31,8 +32,7 @@ from voorzieningen import analyse_voorzieningen, format_voorzieningen_markdown
|
||||
# Config
|
||||
ORS_BASE = "http://192.168.1.71:9080/ors/v2"
|
||||
PDOK_BASE = "https://api.pdok.nl/bzk/locatieserver/search/v3_1"
|
||||
OBSIDIAN_BASE = "http://192.168.1.50:27123"
|
||||
OBSIDIAN_TOKEN = "90ec" + "6de948dc8ef7832fda3516fd900c7a3071dd526edf852ade145aa9daf637"
|
||||
MKDOCS_DIR = "/root/mkdocs/docs/docs/Huizenjacht"
|
||||
|
||||
def geocode_adres(adres):
|
||||
"""Geocode adres naar coördinaten via PDOK Locatieserver"""
|
||||
@@ -98,28 +98,18 @@ def format_oppervlakte(m2):
|
||||
else:
|
||||
return f"{m2:.0f} m²"
|
||||
|
||||
def schrijf_naar_obsidian(rapport_text, adres, subpath="huizenjacht", ext=".md"):
|
||||
"""Schrijf rapport naar Obsidian vault"""
|
||||
def schrijf_naar_mkdocs(content, adres, ext=".md"):
|
||||
"""Schrijf content naar MkDocs docs map als bestand"""
|
||||
os.makedirs(MKDOCS_DIR, exist_ok=True)
|
||||
safe_name = re.sub(r'[^a-zA-Z0-9]+', '-', adres)
|
||||
safe_name = safe_name.strip('-')
|
||||
filename = f"{subpath}/{safe_name}_{datetime.now().strftime('%Y%m%d_%H%M%S')}{ext}"
|
||||
filename = f"{safe_name}_{datetime.now().strftime('%Y%m%d_%H%M%S')}{ext}"
|
||||
filepath = os.path.join(MKDOCS_DIR, filename)
|
||||
|
||||
content_type = "text/html" if ext == ".html" else "text/markdown"
|
||||
req = urllib.request.Request(
|
||||
f"{OBSIDIAN_BASE}/vault/{filename}",
|
||||
data=rapport_text.encode('utf-8'),
|
||||
headers={
|
||||
'Authorization': f'Bearer {OBSIDIAN_TOKEN}',
|
||||
'Content-Type': content_type
|
||||
},
|
||||
method='POST'
|
||||
)
|
||||
with open(filepath, 'w', encoding='utf-8') as f:
|
||||
f.write(content)
|
||||
|
||||
with urllib.request.urlopen(req, timeout=10) as resp:
|
||||
if resp.status in [200, 204]:
|
||||
return filename
|
||||
else:
|
||||
return None
|
||||
return filepath, filename
|
||||
|
||||
def genereer_isochroon_html(adres_naam, lat, lon, auto_iso, fiets_iso):
|
||||
"""Genereer een zelf-contained HTML kaart met Leaflet"""
|
||||
@@ -156,7 +146,7 @@ var autoLayer = L.geoJSON(autoGeojson, {{
|
||||
style: {{ color: '#2563eb', weight: 2, fillColor: '#3b82f6', fillOpacity: 0.2 }},
|
||||
onEachFeature: function(feature, layer) {{
|
||||
var props = feature.properties;
|
||||
layer.bindPopup('<b>Auto 20 min</b><br>Oppervlakte: ' + (props.area/1000000).toFixed(1) + ' km\u00b2<br>Reach factor: ' + props.reachfactor.toFixed(3));
|
||||
layer.bindPopup('<b>Auto 20 min</b><br>Oppervlakte: ' + (props.area/1000000).toFixed(1) + ' km\\u00b2<br>Reach factor: ' + props.reachfactor.toFixed(3));
|
||||
}}
|
||||
}}).addTo(map);
|
||||
|
||||
@@ -164,7 +154,7 @@ var fietsLayer = L.geoJSON(fietsGeojson, {{
|
||||
style: {{ color: '#16a34a', weight: 2, fillColor: '#22c55e', fillOpacity: 0.2 }},
|
||||
onEachFeature: function(feature, layer) {{
|
||||
var props = feature.properties;
|
||||
layer.bindPopup('<b>Fiets 30 min</b><br>Oppervlakte: ' + (props.area/1000000).toFixed(1) + ' km\u00b2<br>Reach factor: ' + props.reachfactor.toFixed(3));
|
||||
layer.bindPopup('<b>Fiets 30 min</b><br>Oppervlakte: ' + (props.area/1000000).toFixed(1) + ' km\\u00b2<br>Reach factor: ' + props.reachfactor.toFixed(3));
|
||||
}}
|
||||
}}).addTo(map);
|
||||
|
||||
@@ -196,7 +186,6 @@ def maak_isochroon_screenshot(html_content, width=1280, height=900, resize_width
|
||||
return None, "Pillow niet geïnstalleerd"
|
||||
|
||||
import tempfile
|
||||
import os
|
||||
|
||||
# Write HTML to temp file
|
||||
with tempfile.NamedTemporaryFile(mode='w', suffix='.html', delete=False, encoding='utf-8') as f:
|
||||
@@ -231,7 +220,7 @@ def maak_isochroon_screenshot(html_content, width=1280, height=900, resize_width
|
||||
return b64, None
|
||||
|
||||
def print_isochroon_sectie(titel, icoon, iso_data, rapport_lines=None):
|
||||
"""Print isochroon sectie; optioneel ook toevoegen aan rapport_lines voor Obsidian"""
|
||||
"""Print isochroon sectie; optioneel ook toevoegen aan rapport_lines"""
|
||||
text = f"{icoon} **{titel}**"
|
||||
print(text)
|
||||
if rapport_lines is not None:
|
||||
@@ -293,15 +282,12 @@ def genereer_rapport(adres_input):
|
||||
print_line(format_voorzieningen_markdown("🏫 **Scholen**", voorzieningen['scholen']))
|
||||
print_line()
|
||||
|
||||
# Genereer interactieve HTML kaart en upload naar Obsidian
|
||||
# Genereer interactieve HTML kaart en sla op in MkDocs.map
|
||||
html_content = genereer_isochroon_html(
|
||||
locatie['adres'], locatie['lat'], locatie['lon'], auto_iso, fiets_iso
|
||||
)
|
||||
html_path = schrijf_naar_obsidian(html_content, locatie['adres'], subpath="huizenjacht", ext=".html")
|
||||
if html_path:
|
||||
print_line(f"🗺️ **[Bekijk interactieve isochroon kaart]({html_path})**")
|
||||
else:
|
||||
print_line("⚠️ Kon interactieve kaart niet opslaan in Obsidian")
|
||||
html_filepath, html_filename = schrijf_naar_mkdocs(html_content, locatie['adres'], ext=".html")
|
||||
print_line(f"🗺️ **Interactieve kaart opgeslagen:** `{html_filepath}`")
|
||||
|
||||
# Genereer screenshot en embed in markdown
|
||||
b64_img, err = maak_isochroon_screenshot(html_content)
|
||||
@@ -313,7 +299,7 @@ def genereer_rapport(adres_input):
|
||||
else:
|
||||
print_line(f"⚠️ Kon geen screenshot maken: {err}")
|
||||
|
||||
# Sla ook ruwe geojson op (lokaal, niet in Obsidian)
|
||||
# Sla ook ruwe geojson op
|
||||
output_file = f"/tmp/isochronen_{datetime.now().strftime('%Y%m%d_%H%M%S')}.geojson"
|
||||
with open(output_file, 'w') as f:
|
||||
json.dump({'auto_20_min': auto_iso, 'fiets_30_min': fiets_iso}, f)
|
||||
@@ -322,13 +308,10 @@ def genereer_rapport(adres_input):
|
||||
print_line("---")
|
||||
print_line("_Onderdelen: geocoding, isochronen, voorzieningen_")
|
||||
|
||||
# Schrijf rapport naar Obsidian
|
||||
# Schrijf rapport naar MkDocs map
|
||||
print_line()
|
||||
md_path = schrijf_naar_obsidian('\n'.join(rapport_lines), locatie['adres'])
|
||||
if md_path:
|
||||
print_line(f"📝 **Opgeslagen in Obsidian:** `{md_path}`")
|
||||
else:
|
||||
print_line("⚠️ Obsidian upload mislukt")
|
||||
md_filepath, md_filename = schrijf_naar_mkdocs('\n'.join(rapport_lines), locatie['adres'], ext=".md")
|
||||
print_line(f"📝 **Rapport opgeslagen:** `{md_filepath}`")
|
||||
|
||||
if __name__ == '__main__':
|
||||
adres = sys.argv[1] if len(sys.argv) > 1 else "Griendvelden 14 Best"
|
||||
|
||||
Reference in New Issue
Block a user