Commit graph

82 commits

Author SHA1 Message Date
cd9d8779d3 Add needs_commons=false option and redesign detail and index pages
Add a needs_commons parameter (default true) to both the API endpoint and
the detail page. When needs_commons=false, look up Wikidata items by OSM
relation ID (P402) via WDQS to return the most specific matching item even
if it has no Wikimedia Commons category. Only activate this path when the
matched item has no Commons category, so that locations with a Commons cat
always get the same result regardless of the parameter.

Remove the nearest-polygon fallback that was returning incorrect results for
inland points in broad admin areas (e.g. returning Falmer for a point in
Brighton). That fallback found the nearest polygon by boundary distance
without requiring containment, so the pin would appear outside the polygon.
The geosearch handles these cases correctly.

Redesign the detail page: place name as heading, result card, collapsible
API response and SPARQL query, improved OSM element cards with left-border
highlight on the matched element, and a toggle button between modes.

Redesign the index page: two-column layout with numbered steps and API
documentation including the needs_commons parameter, Bootstrap form, and
examples as a table.

Closes #28 (Add support for returning Wikidata item instead of commons category)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-18 20:22:54 +01:00
90b009fc90 Return nearest parish/polygon for points in the sea near the coast
When a point falls in the sea within a country boundary (e.g. Scotland
Q22 or England Q21) but not within any specific parish, find the nearest
civil parish or high-admin-level polygon within ~0.15 degrees (~10-17km).

- Add get_nearest_scotland_code() for Scottish civil parishes
- Add Polygon.nearest() for general OSM polygon lookup
- Use .limit(1).scalar() in scotland.py for cleaner returns
2026-02-12 18:19:38 +00:00
7235df4cad Fix coordinate parsing to handle DMS format and prevent stack traces
- Add parse_coordinate() function to handle both decimal degrees and DMS format
- Replace direct float() conversion with robust coordinate parsing
- Add proper validation for latitude/longitude ranges
- Create user-friendly error page instead of showing stack traces
- Support formats like "56°5'58.56"N" and "3°22'33.71"W"
- Update both /detail and / routes with improved error handling

Fixes #29: Don't return stack trace when lat/lon are not integers
2025-07-15 09:05:31 +00:00
72afb4c286 Add new example. 2025-07-15 08:46:46 +00:00
78b8a7d07f Fix SQLAlchemy deprecation warnings
- Import text from sqlalchemy
- Wrap "SELECT 1" statements in text() function in index() and
  detail_page()
- Addresses SQLAlchemy 2.0+ requirement for explicit text() wrapper on
  raw SQL strings
2025-07-15 08:46:04 +00:00
98d11b62a6 Record errors in the database
Closes: #12
2024-02-25 21:42:56 +00:00
274ac0574c errormail: adjust flask import 2024-02-25 21:09:19 +00:00
89fe3404aa Retry failed Wikidata SPARQL queries
Closes: #11
2024-02-25 18:56:46 +00:00
c3355c7154 Add .hypothesis to gitignore 2024-02-25 18:40:36 +00:00
5a14d5b4ef Add a test for ConnectionError from the Wikidata API 2024-02-13 11:44:07 +00:00
413a6e4851 Catch Wikidata API errors and retry
Retry API error calls with exponential backoff.

Send mail to admin if errors continue after retries.

Includes a test.
2024-02-13 11:04:32 +00:00
747e9dec48 Avoid crash for lat/lon in UK EEZ
Handle Wiidata items without a Commons sitelink
2024-01-17 11:48:33 +00:00
e9193be3cc Add missing templates 2024-01-10 16:26:24 +00:00
e1f6b09ec1 Web interface with map where user can place pin for testing
Closes: #21
2024-01-10 16:25:22 +00:00
1625f3d5d1 Show SPARQL query on details page with link to WDQS
Closes: #23
2024-01-10 16:24:54 +00:00
b631476844 Add some more item types to ignore in geosearch 2024-01-10 09:15:27 +00:00
bd165e87e6 Add some more item types to ignore in geosearch 2024-01-09 11:54:56 +00:00
fe3fc85efe Add another fallback 2024-01-09 11:37:02 +00:00
12598ac098 New location for git repo 2024-01-06 11:41:48 +00:00
001468d267 Add some more item types to ignore in geosearch 2024-01-05 20:41:52 +00:00
88d46c1dcd Use fallback if Scottish civil parish lookup fails 2023-12-27 15:06:14 +00:00
9112c685c4 Replace psycopg2 use with sqlalchemy
Closes: #19
2023-12-27 10:38:35 +00:00
a8c4cc51f6 Reorder page to show tables in columns 2023-12-22 12:18:28 +00:00
223cdc4728 Report 100 most recent results where missing=true
Closes: #16
2023-12-15 11:16:35 +00:00
65e3de1b57 Show top locations queried on reports page
Closes: #14
2023-12-15 10:03:54 +00:00
d001ec1155 Pass lat/lon as floats
Closes: #18
2023-12-12 09:43:57 +00:00
29426e2462 Add workaround for Q68816332 mapping to Orphir 2023-12-11 15:46:49 +00:00
96e3bac55c Show average response time on reports page
Closes: #13
2023-12-10 17:31:31 +00:00
e65f85becb Start logging response time ms 2023-12-10 10:41:36 +00:00
8bfe86ee82 Add reports page
Closes: #7
2023-12-10 10:32:15 +00:00
e8c60e9f9b r.json() doesn't throw simplejson error any more 2023-12-04 21:26:09 +00:00
b671843aea Show error page
Closes: #10
2023-11-25 14:29:34 +00:00
06f2d7f804 Report lat/lon out of bound errors
Closes: #9
2023-11-25 13:59:24 +00:00
65d1fbf6fa Update query error template to extend base.html 2023-11-25 13:58:39 +00:00
b785bdb495 Add link from detail page to home 2023-11-25 13:58:13 +00:00
cfa0bab9fc Don't lookup FQDN if no remote IP 2023-11-25 12:51:45 +00:00
b6825564c7 Send error mail to admin
Closes: #8
2023-11-25 11:41:53 +00:00
231cab309d Log FQDN 2023-11-24 15:35:54 +00:00
4720814e1f Log usage
Closes: #6
2023-11-24 15:13:00 +00:00
6dd4ac1115 Add requirements.txt 2023-11-17 13:50:21 -03:00
62dad7640a Add top-level docstring to lookup.py 2023-11-17 12:23:03 -03:00
d425133423 Catch database connection error and show error page
Closes: #5
2023-11-17 12:21:07 -03:00
3b81bc0d96 Correct spelling mistakes 2023-11-17 11:56:21 -03:00
3bad50cb27 Check topic's main category (P910)
Closes: #3
2023-11-04 21:50:48 +00:00
690d3281df Make random page show polygon on map 2023-11-04 21:36:05 +00:00
ea2f172388 Fixed type hints 2023-11-04 21:35:33 +00:00
cde9d09eb0 More samples 2023-11-04 21:23:15 +00:00
b700f88da6 boundary=place is valid
Example: 51.4564, -0.6486 -> Windsor (Q464955)
2023-11-04 21:22:09 +00:00
5dbb50ed34 Bristol example returns Hotwells, Bristol
Closes: #2
2023-11-04 20:50:13 +00:00
50c222d66a Split up code into functions to ease comprehension 2023-11-04 20:49:36 +00:00