No description
Find a file
2026-03-12 11:57:07 +01:00
.idea first commit 2026-03-12 11:51:22 +01:00
testdata first commit 2026-03-12 11:51:22 +01:00
.gitignore first commit 2026-03-12 11:51:22 +01:00
env.example first commit 2026-03-12 11:51:22 +01:00
main.py first commit 2026-03-12 11:51:22 +01:00
pyproject.toml first commit 2026-03-12 11:51:22 +01:00
README.md small addition to README.md 2026-03-12 11:57:07 +01:00
uv.lock first commit 2026-03-12 11:51:22 +01:00

Geosearch

An geolocation agent

  • uses Claude API to extract features from images and drive the agent
  • use OpenStreetMap data via the Overpass API
  • use serpapi to find info on non-geographic items
  • allows human intervention for extra prompts

The results are pretty ok. The loop narrows in on the location, but if there are no hits, it zooms out or traverses sideways.

The test data is provided for humans to get a feel of how it works. They are screenshots from google.maps

Running the agent:

uv run agent main.py [image file]

Setup

The Overpass api is sadly not very stable. For that reason I chose to run it locally. That was quite a bit of work I collected this info as well as possible, but I might have missed something...

Overpass-API

Building the Overpass API works best on linux. Therefore I created an Ubunto VM on my mac using UTM. This works pretty smoothly given you have the right dependencies.

UTM or other hypervisor

  • using virtualisation, so build from source on ARM64
  • ubuntu 24.04 (minimal)
  • add extra virtual disk 64Gb (fits netherlands OSM database)
  • port forwards 22->2222 80->80 5173->5173
sudo apt-get update
sudo apt install g++ make expat libexpat1-dev zlib1g-dev wget bzip2 libtool autoconf osmium-tool git apache2
git clone https://github.com/drolbr/Overpass-API.git
cd Overpass-API/src
autoreconf -fi
cd ../build
../src/configure --prefix="`pwd`"
make -j8
make install
cd ..
chmod u+x src/bin/init_osm3s.sh
wget https://download.geofabrik.de/europe/netherlands-260310.osm.pbf
osmium cat netherlands-260310.osm.pbf -o netherlands.osm.bz2
src/bin/init_osm3s.sh netherlands.osm.bz2 db build

system-ctl overpass-dispatcher

[Unit]
Description=Overpass API Dispatcher
After=local-fs.target network.target

[Service]
User=sander
ExecStart=/home/sander/Overpass-API/build/bin/dispatcher --osm-base --db-dir=/mnt/data/db
ExecStop=/path/to/bin/dispatcher --terminate
Restart=on-failure

[Install]
WantedBy=multi-user.target

optional: Overpass-turbo UI

Overpass-turbo frontend is not used by the agent. I left this in just in case someone wants to integrate it.

git clone https://github.com/tyrasd/overpass-turbo.git
sudo apt install node nvm
nvm install 20
nvm use 20
cd overpass-turbo

in home/sander/overpass-turbo/js/config.ts: defaultServer: "http://localhost/api/", -> don't do this if you use the regular backends

npm run build Did not work npm run dev -> UI on http://localhost:5173

Apache

in /etc/apache2/sites-available/overpass.conf:

<VirtualHost *:80>
ServerName localhost
DocumentRoot /home/sander/overpass-turbo/dist

    ScriptAlias /api/ /home/sander/Overpass-API/build/cgi-bin/

    <Directory "/home/sander/Overpass-API/build/cgi-bin/">
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        AllowOverride None
        Require all granted


        Header always set Access-Control-Allow-Origin "*"
        Header always set Access-Control-Allow-Methods "GET, POST, OPTIONS"
        Header always set Access-Control-Allow-Headers "Content-Type"
    </Directory>

    <Directory "/home/sander/overpass-turbo/dist">
        AllowOverride All
        Require all granted

        Header always set Access-Control-Allow-Origin "*"
        Header always set Access-Control-Allow-Methods "GET, POST, OPTIONS"
        Header always set Access-Control-Allow-Headers "Content-Type"

    </Directory>
</VirtualHost>

-> The overpass turbo Directory is optional

sudo a2ensite overpass.conf
sudo systemctl restart apache2

a human created this readme