FastAPI PostGIS Patterns
Storage Strategy
Store BOTH formats:
- latlng: latitude, longitude columns (client response)
- PostGIS POINT: geometry column (spatial indexing, distance queries)
Pattern
See postgis-storage.md for complete implementation.
Quick Example
from geoalchemy2 import Geometry
from geoalchemy2.elements import WKTElement
class Location(SQLModel, table=True):
latitude: float
longitude: float
location: Geometry = Field(sa_column=Column(Geometry("POINT", srid=4326)))
# Store
point = WKTElement(f"POINT({lng} {lat})", srid=4326)
loc = Location(latitude=lat, longitude=lng, location=point)
db.add(loc)
# Distance query
query = select(Location).where(
func.ST_DWithin(Location.location, point, radius_meters)
)