parent
65d1fbf6fa
commit
06f2d7f804
22
lookup.py
22
lookup.py
|
@ -52,7 +52,7 @@ def do_lookup(
|
||||||
return wikidata.build_dict(hit, lat, lon)
|
return wikidata.build_dict(hit, lat, lon)
|
||||||
|
|
||||||
|
|
||||||
def lat_lon_to_wikidata(lat: str | float, lon: str | float) -> dict[str, typing.Any]:
|
def lat_lon_to_wikidata(lat: float, lon: float) -> dict[str, typing.Any]:
|
||||||
"""Lookup lat/lon and find most appropriate Wikidata item."""
|
"""Lookup lat/lon and find most appropriate Wikidata item."""
|
||||||
scotland_code = scotland.get_scotland_code(lat, lon)
|
scotland_code = scotland.get_scotland_code(lat, lon)
|
||||||
|
|
||||||
|
@ -188,12 +188,21 @@ def index() -> str | Response:
|
||||||
if q and q.strip():
|
if q and q.strip():
|
||||||
return redirect_to_detail(q)
|
return redirect_to_detail(q)
|
||||||
|
|
||||||
lat, lon = request.args.get("lat"), request.args.get("lon")
|
lat_str, lon_str = request.args.get("lat"), request.args.get("lon")
|
||||||
|
|
||||||
if lat is None or lon is None:
|
if lat_str is None or lon_str is None:
|
||||||
samples = sorted(geocode.samples, key=lambda row: row[2])
|
samples = sorted(geocode.samples, key=lambda row: row[2])
|
||||||
return render_template("index.html", samples=samples)
|
return render_template("index.html", samples=samples)
|
||||||
|
|
||||||
|
lat, lon = float(lat_str), float(lon_str)
|
||||||
|
|
||||||
|
if lat < -90 or lat > 90 or lon < -180 or lon > 180:
|
||||||
|
return jsonify(
|
||||||
|
coords={"lat": lat, "lon": lon},
|
||||||
|
error="lat must be between -90 and 90, "
|
||||||
|
+ "and lon must be between -180 and 180",
|
||||||
|
)
|
||||||
|
|
||||||
result = lat_lon_to_wikidata(lat, lon)["result"]
|
result = lat_lon_to_wikidata(lat, lon)["result"]
|
||||||
result.pop("element", None)
|
result.pop("element", None)
|
||||||
result.pop("geojson", None)
|
result.pop("geojson", None)
|
||||||
|
@ -243,6 +252,13 @@ def wikidata_tag() -> str:
|
||||||
|
|
||||||
def build_detail_page(lat: float, lon: float) -> str:
|
def build_detail_page(lat: float, lon: float) -> str:
|
||||||
"""Run lookup and build detail page."""
|
"""Run lookup and build detail page."""
|
||||||
|
if lat < -90 or lat > 90 or lon < -180 or lon > 180:
|
||||||
|
error = (
|
||||||
|
"latitude must be between -90 and 90, "
|
||||||
|
+ "and longitude must be between -180 and 180"
|
||||||
|
)
|
||||||
|
return render_template("query_error.html", lat=lat, lon=lon, error=error)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
reply = lat_lon_to_wikidata(lat, lon)
|
reply = lat_lon_to_wikidata(lat, lon)
|
||||||
except wikidata.QueryError as e:
|
except wikidata.QueryError as e:
|
||||||
|
|
Loading…
Reference in a new issue