De Blikveld2BAG API geeft de panden (en adressen) terug die op de foto te zien zouden moeten zijn. Voor de New York Public Library maakte Bert Spaan eerder een tooltje om zo'n blikveld mee te tekenen. De output van dat tooltje dient als de input voor deze api.
De API geeft alleen de panden terug die daadwerkelijk in zicht staan, panden die achter andere panden staan worden niet teruggegeven.
Bouwjaren worden meegegeven, zodat je desgewenst rekening kunt houden met het moment waarop een foto is genomen.
Onder het kopje Hoe het werkt meer over ... hoe het werkt.
Code door Richard Duivenvoorde, vanaf de zijlijn aangemoedigd door Menno den Engelse, mede mogelijk gemaakt door een financiële bijdrage van het Noord-Hollands Archief, code op GitHub.
camera_json | camera_json=[urlencoded geojson] | De geojson moet een GeometryCollection bevatten met een punt (het camerastandpunt) en een lijn (de tegenovergelegen zijde waarmee het blikveld wordt uitgedrukt), zoals het NYPL tooltje die maakt. |
camera_scale | camera_scale=1.33 | Verlengt het blikveld. Als je denkt dat mensen het blikveld wat 'kort' getrokken hebben, kan je het met dit getal 'verlengen'. |
output | output=output_pand_punten | de opties zijn 'output_adres_punten', 'output_pand_vlakken' of 'output_pand_punten' |
format | format=format_geojson | de opties zijn 'format_geojson' of 'format_geojson_io' (= doorsturen naar geojson.io) |
show_cameras | show_cameras=true | toont in de resultaten ook de geometrie van het blikveld |
show_input | show_input=true | toont alle panden (voor de analyse) binnen de driehoek van het blikveld, ook de panden die achter een ander staan |
method_vertex | method_vertex=true | bereken zichtbaarheid vanuit hoekpunten panden naar camerastandpunt |
method_beam | method_beam=true | bereken zichtbaarheid door te kijken of stralen vanuit het camerastandpunt tegen panden op botsen |
show_debug | show_debug=true | geeft ALLE features terug die hebben meegedaan in de analyses: 'beams', 'vertices', opgehaalde panden etc etc: VEEL! |
Gebruik de 'Verstuur (GET)'-knop om de GET parameters en de url te kunnen zien in de browser. De api zelf werkt zowel met POST als GET.
Op basis van de 'camera-driehoek' worden eerst uit de BAG alle panden opgehaald en geanalyseerd. Desgewenst worden daarna van de resultaat-panden nog de adressen opgehaald.
Het script retourneert eigenlijk altijd GeoJSON of een json met een foutmelding. GeoJSON kun je eenvoudig bekijken (en maken) op https://geojson.io/ of in QGIS. Er is via Github een QGIS project beschikbaar met styling (zoals in onderstaande afbeeldingen) die GeoJSON MET debug informatie inzichtelijker maakt. Zorg dat de GeoJSON met als naam 'result.json' in dezelfde map staat als de QGIS-projectfile.
Het script gebruikt twee manieren om te kijken of er ongehinderd zicht is tussen pand en camerastandpunt: de 'beam' methode en de 'vertex' methode. Beide manieren hebben zo hun voordelen en nadelen, maar als ze samen gebruikt worden vullen ze elkaar prima aan.
Op de tegenover het camerastandpunt gelegen zijde van de blikvelddriehoek worden 100 puntjes gezet (het plaatje hieronder ter illustratie 'maar' 20), en tussen die puntjes en het camerastandpunt worden stralen getekend. Van elk van die stralen wordt gekeken welke panden doorsneden worden, en of er tussen dat snijpunt en het camerastandpunt een ander pand ligt dat het zicht belemmert. Anders gezegd: het pand met dichtsbij-liggende snijpunt wordt geselecteerd.
Nadeel van deze methode is, dat je panden kunt 'missen' als je erg schuin een straat in kijkt: in de figuren wordt nummer 24 gemist. Als een gevel vrijwel parallel loopt aan de stralen is de kans niet onverwaarloosbaar dat de gevel tussen twee stralen in valt en dus niet geraakt wordt.
Onderstaande figuren tonen alle 'debug' informatie uit de analyse:
De vertex methode werkt andersom en neemt de hoekpunten van de panden die binnen de driehoek vallen als uitgangspunt. Vanuit elk coördinaat in de polygoon van elk pand wordt een lijn getrokken naar het camerastandpunt, en vervolgens wordt gekeken of die lijn onderweg niet een ander pand raakt.
Onderstaande figuur toont alle 'debug' informatie uit de analyse:
Ook als je heel schuin een straat in kijkt wordt elk pand (voor zover dat tenminste niet ergens achter ligt) zo keurig meegenomen.
Stel je nu voor dat je vanuit straat A naar een t-splitsing kijkt, en dat aan straat B, waar je tegenaan kijkt, een breed pand ligt. Het kan best dat de hoeken van dat pand niet zichtbaar zijn door de bebouwing in straat A, terwijl de rest van het pand toch prominent in beeld is. Of dat de fotograaf zo dicht op een pand stond dat er überhaupt geen hoeken op de foto terecht zijn gekomen. Hieronder zo'n geval.
De beam-methode (hier met 'maar' 20 beams (standaard 100)) werkt dan wel: