GeoAgent: Evaluating VLM Geolocalization Through Embodied Navigation
Organizations: KIIT Bhubaneswar · IIT Bhubaneswar
Abstract
Modern Vision-Language Models (VLMs) perform well above the human baseline in image geolocalization, a task critically important in disaster response, OSINT verification, and location privacy. However, most efforts to study AI behavior on the task remain limited to static image-based retrieval, classification, and predictions. We argue that faithful recreation of the task should involve embodied navigation, where a multimodal agent autonomously explores its surroundings to gather observations before submitting a prediction. To this end, we introduce GeoAgent, an agentic environment-based benchmark that requires agents to navigate Street View environments to refine their geolocalization through sequential reasoning. Our analysis shows that modern VLMs struggle to discern regional patterns while succeeding at country- and continent-level predictions. When compared to static image-based baselines, agentic navigation significantly improves accuracy across established metrics. We also note severe bias in a developed/developing region context across frontier model architectures and poor self-improvement capabilities given incorrect priors. Overall, our work establishes the challenges of embodied navigation and geospatial reasoning. We publicly release our code and the GeoAgent environment: https://geoagent-benchmark.github.io
Figures & tables
| Tier | # Cities | Samples | Share (%) | Example Cities | Developed | Developing |
|---|---|---|---|---|---|---|
| Tier 1 | 5 | 34 | 2.85 | New York, Tokyo | 5 | 0 |
| Tier 2 | 10 | 86 | 7.14 | Rome, Mumbai | 5 | 5 |
| Tier 3 | 25 | 257 | 21.42 | Bern, Bangalore | 10 | 15 |
| Tier 4 | 25 | 343 | 28.56 | Oulu, Mombasa | 12 | 13 |
| Tier 5 | 35 | 480 | 40.00 | Inuvik, Siem Reap | 14 | 21 |
| Total | 100 | 1,200 | 100.00 | – | 46 | 54 |
| Action | Description |
|---|---|
| ROTATE:<degrees> | Rotate to a specific heading (0–360°) |
| ROTATE_LEFT | Rotate 90° left from current view |
| ROTATE_RIGHT | Rotate 90° right from current view |
| ROTATE_BEHIND | Rotate 180° to look behind |
| LOOK_UP | Tilt the camera up by 20° |
| LOOK_DOWN | Tilt the camera down by 20° |
| Condition | Model | Mean Dist. | Median Dist. | Reas. Len. | Cont. Acc (%) | Country Acc (%) | City Acc (%) |
|---|---|---|---|---|---|---|---|
| Human Baseline | 2753.6 202.2 | 995.9 253.4 | – | 57.6 2.5 | 36.6 2.5 | 7.1 1.3 | |
| Claude Haiku 4.5 | 2951.7 48.9 | 1114.6 27.4 | 329.9 1.6 | 64.4 0.2 | 43.5 0.1 | 9.4 0.2 | |
| GPT-5 Mini | 776.7 10.9 | 232.5 0.1 | 205.9 0.1 | 90.3 0.7 | 80.4 0.6 | 30.3 0.4 | |
| Gemini 3.0 Flash | 1446.8 74.8 | 118.5 11.7 | 232.3 1.9 | 70.0 0.5 | 65.6 0.6 | 39.5 1.0 | |
| Static 4-View | Gemma 3 27B | 2669.2 18.0 | 754.7 0.5 | 198.0 0.2 | 49.5 0.3 | 37.1 0.2 | 12.7 0.2 |
| Llama 4 Scout | 1586.1 61.2 | 458.0 3.7 | 200.4 0.3 | 72.7 0.3 | 59.9 0.7 | 20.8 0.3 | |
| Model | Exploration behavior | Mean Haversine distance (km) | |||||
|---|---|---|---|---|---|---|---|
| Actions | Moves | Rotations | Invalid (%) | Agentic | Random Walk | ||
| GPT-5 Mini | 4.94 0.07 | 2.42 0.12 | 1.51 0.06 | 0.00 | 900 74 | 1581 50 | |
| Gemini 3.0 Flash | 4.96 0.25 | 3.57 0.25 | 0.39 0.02 | 0.00 | 1099 100 | 1565 484 | |
| Claude Haiku 4.5 | 5.61 0.49 | 2.79 0.36 | 1.59 0.14 | 0.04 | 2181 87 | 3260 30 | |
| Gemma 3 27B | 5.96 0.25 | 4.20 0.34 | 0.76 0.49 | 0.00 | 1689 148 | 2205 37 | |
| Llama 4 Scout | 7.55 0.04 | 0.41 0.07 | 6.14 0.07 | 0.00 | 1779 36 | 2783 55 | |
| Model | Agentic 4-View | Agentic 8-View |
|---|---|---|
| Claude Haiku 4.5 | 41.7% | 39.0% |
| Gemini 3.0 Flash | 52.7% | 51.9% |
| Gemma 3 27B | 37.2% | 36.6% |
| Llama 4 Scout | 39.7% | 43.2% |
| GPT-5 mini | 50.0% | 48.5% |
Appendix figures & tables22 assets
Supplementary material from the paper’s appendix.
Appendix
| Feature | Outcome | Pearson | Pearson | Spearman | Rejects Null Hypothesis ( )? |
|---|---|---|---|---|---|
| Reasoning Length | Continent Correct | YES | |||
| Country Correct | YES | ||||
| City Correct | YES | ||||
| Distance Km | YES | ||||
| Points | YES | ||||
| Screenshots Taken | Continent Correct | YES |
| Model | Dev. Level | # Actions | # Moves | # Rotations | Mean Reas. Len. | Accuracy (%) | Mean Dist. (km) | ||
|---|---|---|---|---|---|---|---|---|---|
| Continent | Country | City | |||||||
| Random Baseline | Developed | - | - | - | - | ||||
| Developing | - | - | - | - | |||||
| Claude Haiku 4.5 | Developed | ||||||||
| Developing | |||||||||
| Gemma 3 27B | Developed | ||||||||
| Metric | Gemma-3-27B | Gemma-3-27B | Llama-4 Scout | Llama-4 Scout | GPT-5-mini | GPT-5-mini |
|---|---|---|---|---|---|---|
| (Unlimited Agent) | (Limited Agent) | (Unlimited Agent) | (Limited Agent) | (Unlimited Agent) | (Limited Agent) | |
| Avg Distance (km) | 1577.65 323.61 | 1689.33 147.50 | 3136.53 228.14 | 1779.45 35.50 | 1218.41 311.27 | 899.99 73.51 |
| Avg Actions / Round | 5.36 0.08 | 5.96 0.25 | 22.99 1.68 | 7.55 0.04 | 10.13 0.47 | 4.94 0.07 |
| Avg Reasoning Length | 586.40 12.12 | 268.52 100.38 | 523.63 8.27 | 200.35 0.20 | 566.30 12.73 | 182.77 0.72 |
| Continent Accuracy | 79.0 7.0 | 63.9 2.0 | 69.0 3.0 | 70.1 1.0 | 88.0 5.0 | 88.6 0.0 |
| Country Accuracy | 61.0 8.0 | 54.0 3.0 | 59.0 5.0 | 58.4 1.0 | 79.0 7.0 | 81.2 1.0 |
| Model | Total Tokens | Total Cost ($) | Cost / Round ($) |
|---|---|---|---|
| Claude Haiku 4.5 | 42,416,725 | 187.60 | 0.0174 |
| GPT-5-mini | 54,747,219 | 39.43 | 0.00355 |
| Llama 4 Scout | 89,050,944 | 10.90 | 0.00098 |
| Gemini 3 Flash | 44,421,928 | 8.50 | 0.00079 |
| Gemma 3 27B | 23,296,767 | 2.33 | 0.00021 |
| Model | Actions/round | Limited | Limited | Actions/round | Unlimited | Unlimited |
|---|---|---|---|---|---|---|
| for Limited | $/round | Total $ | for Unlimited | $/round | Total $ | |
| Gemma 3 27B | 5.96 0.25 | $0.00004525 | $0.1629 | 5.36 0.08 | $0.000431 | $0.1292 |
| GPT-5 Mini | 4.94 0.07 | $0.00060825 | $2.1897 | 10.13 0.47 | $0.018215 | $5.4644 |
| Llama 4 Scout | 7.55 0.04 | $0.00018642 | $0.6713 | 22.99 1.68 | $0.010409 | $3.1226 |
| Metric | Developed | Developing | ||
|---|---|---|---|---|
| Image age (years) | 3.09 | 2.51 | (dev’g newer) | |
| Quality score | 0.979 | 0.982 | (dev’g higher) | |
| Sharpness (Var. Laplacian) | 1,499 | 1,540 | (n.s.) |
| Model | Invalid actions (%) | Rounds w/ no nav. (%) |
|---|---|---|
| Claude Haiku 4.5 | 0.04 | – |
| GPT-5 Mini | 0.00 | – |
| Gemini 3.0 Flash | 0.00 | – |
| Gemma 3 27B | 0.00 | – |
| Llama 4 Scout | 0.00 | – |
| Geo-R1 7B | 87.1 | 99.8 |
| Model | mean dist (km) | city acc | country acc | Dev. coef. log-dist OLS | Dev. coef. city logit |
|---|---|---|---|---|---|
| [95% CI] | [95% CI] | [95% CI] | (p) | (p) | |
| GPT-5 Mini | |||||
| Gemini 3.0 Flash | |||||
| Claude Haiku 4.5 | |||||
| Gemma 3 27B | |||||
| Llama 4 Scout |
| UN M49 Subregion | % ref. | % parent | % sample | |
|---|---|---|---|---|
| Northern America | 294 | 22.8 | 24.0 | 24.5 |
| Northern Europe | 139 | 11.2 | 11.3 | 11.6 |
| South America | 136 | 3.5 | 11.0 | 11.3 |
| Southern Asia | 124 | 3.8 | 10.6 | 10.3 |
| South-Eastern Asia | 101 | 5.8 | 8.0 | 8.4 |
| Eastern Europe | 77 | 6.0 | 5.7 | 6.4 |
| Sub-region (M49) | GPT-5 Mini | Gemini Flash | Claude Haiku | Gemma 3 27B | Llama4 Scout | Geo-R1 7B |
|---|---|---|---|---|---|---|
| Western Asia | 215 | 343 | 1,245 | 419 | 1,558 | 728 |
| Eastern Europe | 350 | 698 | 834 | 540 | 1,387 | 300 |
| Western Europe | 572 | 560 | 407 | 1,117 | 918 | 404 |
| Northern America | 656 | 783 | 2,061 | 1,143 | 1,370 | 872 |
| Southern Asia | 1,173 | 1,202 | 1,507 | 1,263 | 1,279 | 1,159 |
| South America | 1,326 | 1,151 | 3,810 | 2,841 | 4,077 | 3,483 |
| Annotator | Distance Error (km) | Continent Acc. | Country Acc. | City Acc. |
|---|---|---|---|---|
| Annotator A | [956, 4692] | |||
| Annotator B | [1062, 5545] | |||
| Annotator C | [1237, 2273] | |||
| Annotator D | [1829, 4319] | |||
| Annotator E | [2966, 4598] | |||
| Annotator F | [2257, 4033] |
| Country | Claude Haiku 4.5 | Gemini 3.0 Flash | Gemma 3 27B | Llama 4 Scout | GPT-5 mini |
|---|---|---|---|---|---|
| India | indian, india, auto, tropical, market | india, delhi, indian, rickshaws, auto | india, hindi, indian, hindi signage, auto rickshaws | india, tuk, english, urban, script | indian, india, tropical, south asian, south |
| Japan | japanese, japanese residential, ginkgo, japan, tokyo | japanese, japan, tokyo, utility, nakano | japanese, autumn, japanese writing, retaining, concrete retaining | japanese, plaque, japanese characters, presence japanese, japan | ginkgo, ginkgo leaves, japanese, leaves, tokyo |
| Norway | nordic, norway, norwegian, road, scandinavian | norway, norwegian, oslo, sweden, birch | norway, scandinavian, road, sweden, norwegian | picket, european, white picket, picket fence, white | norway, norwegian, scandinavian, picket, birch |
| Switzerland | swiss, tunnel, alpine, european, roofs ivy | switzerland, bern, swiss, zurich, shutters | german, tram tracks, tram tracks, park | shutters, chinese, european, architecture shutters, chinese characters | swiss, park, switzerland, european, chinese |
| Taiwan | japanese, chinese, urban, taiwan, taiwanese | taipei, taiwan, traditional chinese, chinese, xinyi | chinese characters, chinese, characters, taiwan, scooters | chinese, chinese characters, characters, presence chinese, asian | chinese, taiwan, taipei, traditional chinese, traditional |
| Thailand | river, bridge, cable, mekong, stayed | bangkok, soi, thai, thailand, bridge | river, chao phraya, chao, phraya, phraya river | river, bridge, water, stayed bridge, cable | river, phraya, chao, chao phraya, bangkok |
| Country | Top Words |
|---|---|
| Argentina | spanish, andean, colombian, colonial, white, argentine, argentina, altitude, high altitude, urban |
| Australia | australian, modern, australia, melbourne, red, brick, white, tropical, trees, vegetation |
| Bangladesh | bengali, tropical, india, indian, vegetation, bengali script, bangladesh, tropical vegetation, kerala, script |
| Brazil | brazilian, brazil, tropical, portuguese, vegetation, tropical vegetation, modern, urban, portuguese signage, portuguese language |
| Cambodia | cambodia, rural, tropical, vegetation, red, soil, tropical vegetation, laterite, red laterite, laos |
| Canada | canadian, north american, american, prairie, canada, rural, midwest, trees, flat, road |
| Country | Top Words |
|---|---|
| Argentina | spanish, spanish speaking, presence spanish, spanish text, latin american, latin, south, american, speaking country, speaking |
| Australia | australian, english, palm, palm trees, australia, modern, city, skyline, city skyline, cars |
| Bangladesh | bengali, bangladesh, script, bengali script, tuk, tropical, rickshaws, presence bengali, south asian, palm |
| Brazil | portuguese, portuguese speaking, brazil, presence portuguese, cars, portuguese text, latin american, speaking, speaking country, spanish |
| Cambodia | dirt, khmer, tropical, cambodia, dirt road, khmer script, southeast, shows dirt, wall, dirt path |
| Canada | north, north american, typical north, american, suburban, canada, suggest north, houses, vehicles, cars |
| Country | Top Words |
|---|---|
| Argentina | spanish, argentina, argentine, buenos aires, buenos, aires, ushuaia, spanish language, uruguay, american |
| Australia | australian, melbourne, australia, sydney, laneway, australian style, english, darwin, tropical, inner |
| Bangladesh | bengali, bangladesh, bengali script, tropical, dhaka, rickshaws, rickshaw, script, cycle, india |
| Brazil | portuguese, brazilian, brazil, tropical, portuguese language, brazilian style, indicate brazil, portuguese signage, curitiba, brazilian city |
| Canada | prairie, canadian, north american, american, north, canada, saskatchewan, alberta, canadian prairie, flat prairie |
| France | paris, french, central paris, france, parisian, haussmann, haussmann style, lib, french language, le |
| Field | Type | Description |
| image_id | string | MD5 hash of the panorama image bytes — unique instance identifier |
| pano_id | string | Google Street View panorama ID |
| image_filename | string | Filename within the collection archive |
| image_path | string | Relative path to the stored image file |
| ground_truth_lat / ground_truth_lng | float | Coordinates of the Street View camera |
| actual_lat / actual_lng | float | Coordinates of the Google-reported actual location |