# Python Fastapi Programmer:fastapi Postgis

> PostGIS location storage patterns for FastAPI with SQLModel. Use when implementing location features requiring latitude/longitude storage, spatial indexing, or distance calculations. Stores both latlng (client response) and PostGIS POINT geometry (spatial queries).

- Skill: `ureca-corp/python-fastapi-programmer-fastapi-postgis` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add ureca-corp/python-fastapi-programmer-fastapi-postgis`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ureca-corp/python-fastapi-programmer-fastapi-postgis/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: ureca-corp (https://skillmd.com/u/ureca-corp)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/ureca-corp/python-fastapi-programmer-fastapi-postgis

---


# FastAPI PostGIS Patterns

## Storage Strategy

Store BOTH formats:
1. **latlng**: latitude, longitude columns (client response)
2. **PostGIS POINT**: geometry column (spatial indexing, distance queries)

## Pattern

See [postgis-storage.md](references/postgis-storage.md) for complete implementation.

## Quick Example

```python
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)
)
```

