Skip to main content
Glama

append_gpd

Merge two shapefiles vertically into one by concatenating their data. Specify input paths for both shapefiles and define the output path for the combined result.

Instructions

Reads two shapefiles directly, concatenates them vertically.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
output_pathYes
shapefile1_pathYes
shapefile2_pathYes

Implementation Reference

  • The handler function for the 'append_gpd' tool. It reads two shapefiles into GeoDataFrames, aligns CRS if necessary, concatenates them using pandas.concat, and saves the result as a new shapefile. Decorated with @gis_mcp.tool() for MCP registration.
    @gis_mcp.tool() def append_gpd(shapefile1_path: str, shapefile2_path: str, output_path: str) -> Dict[str, Any]: """ Reads two shapefiles directly, concatenates them vertically.""" try: # Configure a basic logger for demonstration logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) # Step 1: Read the two shapefiles into GeoDataFrames. logger.info(f"Reading {shapefile1_path}...") gdf1 = gpd.read_file(shapefile1_path) logger.info(f"Reading {shapefile2_path}...") gdf2 = gpd.read_file(shapefile2_path) # Step 2: Ensure the Coordinate Reference Systems (CRS) match. if gdf1.crs != gdf2.crs: logger.warning( f"CRS mismatch: GDF1 has '{gdf1.crs}' and GDF2 has '{gdf2.crs}'. " "Reprojecting GDF2." ) gdf2 = gdf2.to_crs(gdf1.crs) # Step 3: Concatenate the two GeoDataFrames. combined_gdf = pd.concat([gdf1, gdf2], ignore_index=True) # Step 4: Save the combined GeoDataFrame to a new shapefile. output_path_resolved = resolve_path(output_path, relative_to_storage=True) output_path_resolved.parent.mkdir(parents=True, exist_ok=True) logger.info(f"Saving combined shapefile to {output_path_resolved}...") combined_gdf.to_file(str(output_path_resolved), driver='ESRI Shapefile') return { "status": "success", "message": f"Shapefiles concatenated successfully into '{output_path_resolved}'.", "info": { "output_path": str(output_path_resolved), "num_features": len(combined_gdf), "crs": str(combined_gdf.crs), "columns": list(combined_gdf.columns) } } except Exception as e: logger.error(f"Error processing shapefiles: {str(e)}") raise ValueError(f"Failed to process shapefiles: {str(e)}")
  • Resource listing that registers 'append_gpd' as one of the available GeoPandas join operations under 'gis://geopandas/joins'.
    @gis_mcp.resource("gis://geopandas/joins") def get_geopandas_joins() -> Dict[str, List[str]]: """List available GeoPandas join operations.""" return { "operations": [ "append_gpd", "merge_gpd", "sjoin_gpd", "sjoin_nearest_gpd", "point_in_polygon" ] }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mahdin75/gis-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server