Geospatial

04-May-2025

📷 exif_inspect: A Lightweight EXIF Viewer for Photo Verification

✅ What It Is

exif_inspect is a simple, standalone HTML and JavaScript tool that reads EXIF metadata from image files — specifically GPS location and time/date information. No backend. No installs. Just open the file in your browser and drag in the images. Location data is parsed and plotted on a Google map

EXIF Inspect Tool

🔍 Why?

In automated disaster recovery work, verifying the location and timestamp of submitted photos is critical:

With exif_inspect, you can cross-reference geotagged image data with a stated address and timeframe.

🛠 How It Works

⚡️ Key Benefits

View the GitHub repo
23-Feb-2025

As of 2-Feb-2025 the Palisades Wildfire is 100% contained. https://www.fire.ca.gov/incidents/2025/1/7/palisades-fire has other details. One of the issues from a disaster assistance perspective, was the ability to cross check addresses to see if they resided inside of the fire perimeter. fire.ca.gov provides Google Earth polygons in kml format.

A utility was needed to quickly see if a damaged property was within the fire perimeter. Typing the addresses one by one into Google Earth was a non starter. The address is geocoded using Google's geocoding service, converting the address to lat/long coordinates. This provides a point on the map and it is a matter of checking if that point is within the polygon. If yes, the address most likely suffered damage, if not, the damage may be minimal (smoke damage) or potential fraud. This is where the "distance_to_Palisades_fire_perimeter" was handy to see how far away the mapped address is to the fire perimeter.

Fire perimeter with holes

The project is coded in python with the only input being an address. A module is also coded in visual basic to utilize the project in Microsoft Excel (Github). This allowed us to quickly retrieve feedback for hundreds of addresses within seconds. Output is in JSON format. The service runs on a flask server. This was fine for our brief need on this fire however the project will be abstracted out to use on any Google Earth KML polygon. A different server will be required for any long term use as flask will not scale, only allowing one connection at a time.

Utilizing a test address, 1369 El Hito Cir, Pacific Palisades, CA 90272, returns the following:

[  { "address": "1369 El Hito Cir, Pacific Palisades, CA 90272", "coordinates": [ 34.060475,-118.5433648 ], "distance_to_Palisades_fire_perimeter": 0.7, "inside_polygon": false }]

We can see that the address is in Palisades however it falls within one of the "holes" or unaffected areas within the greater area.

Address in hole

Utilzing another test address: 15007 Bestor Blvd, Pacific Palisades, CA 90272 yields the following:

[ {"address": "15007 Bestor Blvd, Pacific Palisades, CA 90272", "coordinates": [34.0518658,-118.5235415 ],"distance_to_Palisades_fire_perimeter": 0,"inside_polygon": true}]

This address falls within the affected area.

Address within fire perimeter