- 
  Notifications
 You must be signed in to change notification settings 
- Fork 0
Geospatial Operations
7 specialized tools for spatial queries, distance calculations, and GIS operations using PostGIS.
Requirements: PostGIS extension (v3.0+)
| Tool | Purpose | Geometry Type | 
|---|---|---|
| spatial_search | Find geometries within area | Point, Polygon, LineString | 
| distance_calculate | Calculate distances | Point-to-point, point-to-geometry | 
| within_radius | Find points within radius | Point, Circle | 
| geometry_validate | Validate geometry data | All types | 
| coordinate_transform | Transform coordinate systems | SRID conversion | 
| spatial_index_create | Create spatial indexes | GIST, BRIN | 
| geo_stats | Spatial statistics | Area, length, bounds | 
Search for geometries within a specified area or bounding box.
Parameters:
- 
table_name(string, required): Table with geometry column
- 
geometry_column(string, required): Column containing geometries
- 
search_geometry(string, required): WKT geometry to search within
- 
operation(string, optional):within,intersects,contains(default:within)
- 
limit(integer, optional): Maximum results
Returns:
- Matching geometries
- Distance/area calculations
- Geometry properties
Example:
# Find points within polygon result = spatial_search( table_name="locations", geometry_column="geom", search_geometry="POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))", operation="within" ) # Returns: [ # {"id": 1, "name": "Store A", "geom": "POINT(5 5)"}, # {"id": 2, "name": "Store B", "geom": "POINT(7 3)"}, # ... # ] # Find all geometries intersecting a line result = spatial_search( table_name="roads", geometry_column="path", search_geometry="LINESTRING(0 0, 10 10)", operation="intersects" )
Operations:
- 
within- Geometries completely inside search area
- 
intersects- Geometries that touch/cross search area
- 
contains- Search area is completely inside geometry
Use Cases:
- Store locator
- Service area analysis
- Delivery zone checking
- Proximity queries
Calculate distances between geometries or points.
Parameters:
- 
table_name(string, required): Source table
- 
geometry_column(string, required): Geometry column
- 
reference_geometry(string, required): WKT reference point/geometry
- 
unit(string, optional):meters,kilometers,miles,feet(default:meters)
- 
limit(integer, optional): Nearest N results
Returns:
- Distance values in specified unit
- Sorted by distance (nearest first)
Example:
# Find nearest stores result = distance_calculate( table_name="stores", geometry_column="location", reference_geometry="POINT(-122.4194 37.7749)", # San Francisco unit="kilometers", limit=5 ) # Returns: [ # {"id": 42, "name": "Downtown Store", "distance_km": 0.5}, # {"id": 18, "name": "Market St Store", "distance_km": 1.2}, # ... # ] # Calculate distance to all locations result = distance_calculate( table_name="warehouses", geometry_column="location", reference_geometry="POINT(-74.0060 40.7128)", # New York unit="miles" )
Supported Units:
- 
meters(default)
- kilometers
- miles
- feet
Use Cases:
- Nearest neighbor search
- Distance-based sorting
- Travel time estimation
- Service radius verification
Find all points within a specified radius.
Parameters:
- 
table_name(string, required): Source table
- 
geometry_column(string, required): Point geometry column
- 
center_point(string, required): WKT center point
- 
radius(number, required): Search radius
- 
unit(string, optional): Distance unit (default:meters)
Returns:
- Points within radius
- Distance from center
- Sorted by distance
Example:
# Find stores within 5km result = within_radius( table_name="stores", geometry_column="location", center_point="POINT(-122.4194 37.7749)", radius=5, unit="kilometers" ) # Returns: [ # { # "id": 1, # "name": "Downtown Store", # "location": "POINT(-122.4183 37.7750)", # "distance_km": 0.12 # }, # ... # ] # Find all points within 1 mile result = within_radius( table_name="customers", geometry_column="address_point", center_point="POINT(-74.0060 40.7128)", radius=1, unit="miles" )
Use Cases:
- Radius search
- Geofencing
- Coverage analysis
- Service area definition
Validate and check geometry data quality.
Parameters:
- 
table_name(string, required): Table to validate
- 
geometry_column(string, required): Geometry column
- 
fix_invalid(boolean, optional): Attempt to fix invalid geometries
Returns:
- Validation results
- Error descriptions
- Fixed geometries (if requested)
Example:
result = geometry_validate( table_name="parcels", geometry_column="boundary", fix_invalid=True ) # Returns: { # "total_geometries": 1000, # "valid": 985, # "invalid": 15, # "fixed": 12, # "errors": [ # { # "id": 42, # "error": "Self-intersection", # "fixed": True # }, # { # "id": 108, # "error": "Ring Self-intersection", # "fixed": False # } # ] # }
Common Validation Issues:
- Self-intersecting polygons
- Duplicate vertices
- Invalid ring orientation
- Unclosed polygons
- Null geometries
Use Cases:
- Data quality assurance
- Import validation
- GIS data cleaning
- Topology correction
Transform geometries between coordinate reference systems (SRID).
Parameters:
- 
table_name(string, required): Source table
- 
geometry_column(string, required): Geometry column
- 
source_srid(integer, required): Source SRID
- 
target_srid(integer, required): Target SRID
- 
update_table(boolean, optional): Update geometries in place
Returns:
- Transformed geometries
- Transformation statistics
- SRID information
Example:
# Transform from WGS84 (4326) to Web Mercator (3857) result = coordinate_transform( table_name="locations", geometry_column="geom", source_srid=4326, target_srid=3857, update_table=False ) # Common transformations # WGS84 (GPS): 4326 # Web Mercator (Google Maps): 3857 # UTM Zone 10N: 32610 # State Plane CA Zone 3: 2227
Common SRIDs:
- 
4326- WGS84 (GPS coordinates, lat/lon)
- 
3857- Web Mercator (Web maps)
- 
2163- US National Atlas Equal Area
- 
32601-32660- UTM Northern Hemisphere
- 
32701-32760- UTM Southern Hemisphere
Use Cases:
- Map projection conversion
- GPS coordinate transformation
- GIS data integration
- Spatial analysis preparation
Create optimized spatial indexes for faster queries.
Parameters:
- 
table_name(string, required): Target table
- 
geometry_column(string, required): Geometry column
- 
index_type(string, optional):gist(default) orbrin
- 
index_name(string, optional): Custom index name
Returns:
- Index creation status
- Estimated performance improvement
- Index size
Example:
# GIST index (recommended for most cases) result = spatial_index_create( table_name="locations", geometry_column="geom", index_type="gist" ) # BRIN index (for very large, spatially sorted data) result = spatial_index_create( table_name="sensor_readings", geometry_column="location", index_type="brin" )
Index Types:
GIST (Generalized Search Tree):
- Best for: Most spatial queries
- Pros: Fast searches, good for mixed workloads
- Cons: Larger index size, slower to build
BRIN (Block Range Index):
- Best for: Very large, spatially clustered data
- Pros: Small index size, fast to build
- Cons: Slower searches, requires spatial clustering
Use Cases:
- Query performance optimization
- Large dataset handling
- Production readiness
Calculate spatial statistics on geometry data.
Parameters:
- 
table_name(string, required): Source table
- 
geometry_column(string, required): Geometry column
- 
include_area(boolean, optional): Calculate areas
- 
include_length(boolean, optional): Calculate lengths
- 
include_bounds(boolean, optional): Calculate bounding boxes
Returns:
- Spatial statistics
- Aggregate measurements
- Distribution analysis
Example:
result = geo_stats( table_name="parcels", geometry_column="boundary", include_area=True, include_length=True, include_bounds=True ) # Returns: { # "total_geometries": 5000, # "geometry_types": { # "POLYGON": 4850, # "MULTIPOLYGON": 150 # }, # "area_stats": { # "total_sqm": 5000000, # "avg_sqm": 1000, # "min_sqm": 50, # "max_sqm": 10000 # }, # "perimeter_stats": { # "total_m": 250000, # "avg_m": 50, # "min_m": 10, # "max_m": 500 # }, # "bounds": { # "min_x": -122.5, # "min_y": 37.7, # "max_x": -122.3, # "max_y": 37.8 # }, # "srid": 4326 # }
Use Cases:
- Data inventory
- Quality assessment
- Area calculations
- Spatial extent analysis
# 1. Find stores within 10km nearby = within_radius( table_name="stores", geometry_column="location", center_point="POINT(-122.4194 37.7749)", radius=10, unit="kilometers" ) # 2. Get exact distances distances = distance_calculate( table_name="stores", geometry_column="location", reference_geometry="POINT(-122.4194 37.7749)", unit="kilometers", limit=5 ) # 3. Find stores in delivery area in_zone = spatial_search( table_name="stores", geometry_column="location", search_geometry="POLYGON(...)", # Delivery zone operation="within" )
# 1. Validate service area geometries validation = geometry_validate( table_name="service_areas", geometry_column="boundary", fix_invalid=True ) # 2. Calculate coverage statistics stats = geo_stats( table_name="service_areas", geometry_column="boundary", include_area=True ) # 3. Find customers in service area covered = spatial_search( table_name="customers", geometry_column="address_point", search_geometry="POLYGON(...)", # Service area operation="within" )
# 1. Transform coordinates transform = coordinate_transform( table_name="imported_data", geometry_column="geom", source_srid=4269, # NAD83 target_srid=4326, # WGS84 update_table=True ) # 2. Create spatial index index = spatial_index_create( table_name="imported_data", geometry_column="geom", index_type="gist" ) # 3. Validate geometries validate = geometry_validate( table_name="imported_data", geometry_column="geom", fix_invalid=True )
# Create index before running queries spatial_index_create( table_name="locations", geometry_column="geom", index_type="gist" )
# WGS84 (4326) for GPS data # Web Mercator (3857) for web maps # UTM for accurate distance measurements # Transform to appropriate SRID for your use case coordinate_transform( table_name="data", geometry_column="geom", source_srid=4326, target_srid=32610 # UTM Zone 10N for California )
# Always validate imported data geometry_validate( table_name="new_data", geometry_column="geom", fix_invalid=True )
- Extension Setup - Install PostGIS
- Core Database Tools - Basic operations
- Statistical Analysis - Spatial statistics
See Home for more tool categories.