Skip to main content
Glama

gamma_statistic

Calculate spatial autocorrelation using the Gamma statistic to analyze geographic patterns in shapefile data.

Instructions

Compute Gamma Statistic for spatial autocorrelation.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
shapefile_pathYes
dependent_varNoLAND_USE
target_crsNoEPSG:4326
distance_thresholdNo

Implementation Reference

  • The primary handler function for the 'gamma_statistic' tool. It is decorated with @gis_mcp.tool(), loads geospatial data, computes the Gamma spatial autocorrelation statistic using esda.Gamma, handles various attribute names for results, and returns a structured response with status, message, gamma value, p-value, and data preview.
    @gis_mcp.tool() def gamma_statistic(shapefile_path: str, dependent_var: str = "LAND_USE", target_crs: str = "EPSG:4326", distance_threshold: float = 100000) -> Dict[str, Any]: """Compute Gamma Statistic for spatial autocorrelation.""" gdf, y, w, (threshold, unit), err = pysal_load_data(shapefile_path, dependent_var, target_crs, distance_threshold) if err: return {"status": "error", "message": err} import esda stat = esda.Gamma(y, w) preview = gdf[['geometry', dependent_var]].head(5).assign( geometry=lambda df: df.geometry.apply(lambda g: g.wkt) ).to_dict(orient="records") # Gamma statistic - check for available attributes gamma_val = None if hasattr(stat, "G"): gamma_val = float(stat.G) elif hasattr(stat, "gamma"): gamma_val = float(stat.gamma) elif hasattr(stat, "gamma_index"): gamma_val = float(stat.gamma_index) p_val = None if hasattr(stat, "p_value"): p_val = float(stat.p_value) elif hasattr(stat, "p_sim"): p_val = float(stat.p_sim) return { "status": "success", "message": f"Gamma Statistic completed successfully (threshold: {threshold} {unit})", "result": { "Gamma": gamma_val, "p_value": p_val, "data_preview": preview } }
  • Supporting helper function 'pysal_load_data' used by gamma_statistic and other PySAL tools. Loads GeoDataFrame, reprojects, creates row-standardized distance-based spatial weights, handles islands, and returns data, values, weights, and threshold info.
    def pysal_load_data(shapefile_path: str, dependent_var: str, target_crs: str, distance_threshold: float): """Common loader and weight creation for esda statistics.""" if not os.path.exists(shapefile_path): return None, None, None, None, f"Shapefile not found: {shapefile_path}" gdf = gpd.read_file(shapefile_path) if dependent_var not in gdf.columns: return None, None, None, None, f"Dependent variable '{dependent_var}' not found in shapefile columns" gdf = gdf.to_crs(target_crs) effective_threshold = distance_threshold unit = "meters" if target_crs.upper() == "EPSG:4326": effective_threshold = distance_threshold / 111000 unit = "degrees" y = gdf[dependent_var].values.astype(np.float64) import libpysal w = libpysal.weights.DistanceBand.from_dataframe(gdf, threshold=effective_threshold, binary=False) w.transform = 'r' for island in w.islands: w.weights[island] = [0] * len(w.weights[island]) w.cardinalities[island] = 0 return gdf, y, w, (effective_threshold, unit), None
  • Resource function listing available ESDA operations including 'gamma_statistic', serving as a discovery/registration point for the tool.
    @gis_mcp.resource("gis://operations/esda") def get_spatial_operations() -> Dict[str, List[str]]: """List available spatial analysis operations. This is for esda library. They are using pysal library.""" return { "operations": [ "getis_ord_g", "morans_i", "gearys_c", "gamma_statistic", "moran_local", "getis_ord_g_local", "join_counts", "join_counts_local", "adbscan" ] }
  • Import of pysal_functions module in main.py, which triggers the registration of all @gis_mcp.tool() decorated functions including gamma_statistic via FastMCP decorators.
    from . import ( geopandas_functions, shapely_functions, rasterio_functions, pyproj_functions, pysal_functions, )

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