parent
							
								
									a8c4cc51f6
								
							
						
					
					
						commit
						9112c685c4
					
				| 
						 | 
					@ -1,16 +1,17 @@
 | 
				
			||||||
"""Reverse geocode civil parishes in Scotland."""
 | 
					"""Reverse geocode civil parishes in Scotland."""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import psycopg2
 | 
					from sqlalchemy import func
 | 
				
			||||||
from flask import current_app
 | 
					
 | 
				
			||||||
 | 
					from geocode.database import session
 | 
				
			||||||
 | 
					from geocode.model import Scotland
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def get_scotland_code(lat: str | float, lon: str | float) -> str | None:
 | 
					def get_scotland_code(lat: float, lon: float) -> str | None:
 | 
				
			||||||
    """Find civil parish in Scotland for given lat/lon."""
 | 
					    """Find civil parish in Scotland for given lat/lon."""
 | 
				
			||||||
    conn = psycopg2.connect(**current_app.config["DB_PARAMS"])
 | 
					    point = func.ST_Transform(func.ST_SetSRID(func.ST_MakePoint(lon, lat), 4326), 27700)
 | 
				
			||||||
    cur = conn.cursor()
 | 
					    result = (
 | 
				
			||||||
 | 
					        session.query(Scotland.code)
 | 
				
			||||||
    point = f"ST_Transform(ST_SetSRID(ST_MakePoint({lon}, {lat}), 4326), 27700)"
 | 
					        .filter(func.ST_Contains(Scotland.geom, point))
 | 
				
			||||||
    cur.execute(f"select code, name from scotland where st_contains(geom, {point});")
 | 
					        .first()
 | 
				
			||||||
    row = cur.fetchone()
 | 
					    )
 | 
				
			||||||
    conn.close()
 | 
					    return result[0] if result else None
 | 
				
			||||||
    return row[0] if row else None
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue