[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6KCYBV6WRX55EHTYMMH53CJ":3,"skill-same:01M6KCYBV6WRX55EHTYMMH53CJ":52},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":25,"linkOnly":26,"markdownContent":27,"markdownBody":28,"frontMatter":29,"refName":30,"commitSha":31,"skillDirectory":32,"forksCount":33,"repositoryHtmlUrl":34,"repositoryHomepageUrl":35,"ownerHtmlUrl":36,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":37,"install":38,"resources":51},"01M6KCYBV6WRX55EHTYMMH53CJ","plate-tectonics-geospatial",null,"Analyze plate tectonics data using GeoPandas, identify points within plates, and calculate distances to boundaries.","cxcscmu\u002FSkillLearnBench","cxcscmu","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F142838272?v=4","01M6KCQDFQWPDSN0MKZY96MSQP","01M6KCQDM7G70TKJ28NTSQC0RZ",93,"MIT","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fb1-one-shot-claude-haiku-4-5\u002Fearthquake-plate-calculation\u002Fplate-tectonics-geospatial\u002FSKILL.md",[],[18,19,20,21,22,23,24],"geospatial","plate tectonics","plate tectonics geospatial","data","geopandas","analyze","calculate","2026-11-10 10:12:30",false,"---\nname: plate-tectonics-geospatial\ndescription: Analyze plate tectonics data using GeoPandas, identify points within plates, and calculate distances to boundaries.\n---\n\n# Plate Tectonics Geospatial Analysis\n\n## Overview\nThe PB2002 (Plate Boundaries 2002) dataset provides comprehensive data on tectonic plate boundaries and plate definitions. This skill covers loading, processing, and spatial analysis of plate data.\n\n## PB2002 Dataset Structure\n\n### Boundary Data (PB2002_boundaries.json)\n```json\n{\n  \"type\": \"FeatureCollection\",\n  \"features\": [\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"LineString\",\n        \"coordinates\": [[lon1, lat1], [lon2, lat2], ...]\n      },\n      \"properties\": {\n        \"PLATE1\": \"Pacific\",\n        \"PLATE2\": \"North American\",\n        \"TYPE\": \"subduction zone\",  \u002F\u002F or \"transform\", \"spreading\", etc.\n        \"STEPOVER\": \"\"\n      }\n    }\n  ]\n}\n```\n\n### Plate Data (PB2002_plates.json)\n```json\n{\n  \"type\": \"FeatureCollection\",\n  \"features\": [\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"MultiPolygon\",  \u002F\u002F or Polygon\n        \"coordinates\": [...]\n      },\n      \"properties\": {\n        \"PlateName\": \"Pacific\",\n        \"PlateID\": 101\n      }\n    }\n  ]\n}\n```\n\n## Loading and Processing\n\n### Load Plate Boundaries\n```python\nimport geopandas as gpd\nimport json\n\nwith open('\u002Froot\u002FPB2002_boundaries.json', 'r') as f:\n    boundaries_geojson = json.load(f)\n\nboundaries_gdf = gpd.GeoDataFrame.from_features(\n    boundaries_geojson['features'],\n    crs='EPSG:4326'\n)\n\n# Filter for specific plate boundary\npacific_boundaries = boundaries_gdf[\n    (boundaries_gdf['PLATE1'] == 'Pacific') |\n    (boundaries_gdf['PLATE2'] == 'Pacific')\n]\n```\n\n### Load Plate Polygons\n```python\nwith open('\u002Froot\u002FPB2002_plates.json', 'r') as f:\n    plates_geojson = json.load(f)\n\nplates_gdf = gpd.GeoDataFrame.from_features(\n    plates_geojson['features'],\n    crs='EPSG:4326'\n)\n\n# Get Pacific plate polygon\npacific_plate = plates_gdf[plates_gdf['PlateName'] == 'Pacific']\n```\n\n## Spatial Operations\n\n### Identify Points Within Plate\n```python\n# Use spatial join to find earthquakes within Pacific plate\nearthquakes_in_pacific = gpd.sjoin(\n    earthquakes_gdf,\n    pacific_plate,\n    how='inner',\n    predicate='within'\n)\n```\n\n### Calculate Distance to Boundary\n```python\n# For each earthquake, calculate minimum distance to boundary\ndef min_distance_to_boundary(point, boundary_lines_gdf):\n    \"\"\"Calculate minimum distance from point to any boundary line\"\"\"\n    min_dist = float('inf')\n    for idx, boundary in boundary_lines_gdf.iterrows():\n        dist = point.distance(boundary['geometry'])\n        if dist \u003C min_dist:\n            min_dist = dist\n    return min_dist\n\n# Apply to all earthquakes in the plate\n# First, project to projected CRS for accurate distance in km\nearthquakes_projected = earthquakes_in_pacific.to_crs('EPSG:3857')\nboundaries_projected = pacific_boundaries.to_crs('EPSG:3857')\n\nearthquakes_projected['distance_to_boundary'] = earthquakes_projected.geometry.apply(\n    lambda point: min_distance_to_boundary(point, boundaries_projected)\n)\n\n# Convert from meters to kilometers\nearthquakes_projected['distance_km'] = earthquakes_projected['distance_to_boundary'] \u002F 1000\n```\n\n### Find Maximum Distance\n```python\n# Find earthquake furthest from boundary\nfurthest_idx = earthquakes_projected['distance_km'].idxmax()\nfurthest_earthquake = earthquakes_projected.loc[furthest_idx]\n```\n\n## Important Considerations\n\n### Polygon Validation\n```python\n# Ensure polygons are valid before spatial operations\nif not plates_gdf.geometry.is_valid.all():\n    plates_gdf['geometry'] = plates_gdf.geometry.buffer(0)\n\nif not boundaries_gdf.geometry.is_valid.all():\n    boundaries_gdf['geometry'] = boundaries_gdf.geometry.buffer(0)\n```\n\n### Handling MultiPolygons\n```python\n# If a plate is represented as MultiPolygon, create a union\npacific_plate_union = pacific_plate.unary_union\n```\n\n### Projection for Accurate Distances\n```python\n# Use Web Mercator (EPSG:3857) for global distances in meters\n# Then convert to kilometers\n\n# For regional analysis, consider UTM zones\n# EPSG:32633 = UTM Zone 33N\n# EPSG:32733 = UTM Zone 33S\n```\n\n## Common Pitfalls\n1. **Not projecting before distance calculations** - Distances in geographic CRS are meaningless\n2. **Invalid geometries** - Use `.buffer(0)` to fix self-intersecting polygons\n3. **Antimeridian issues** - Points near ±180° longitude may have wrapping issues\n4. **MultiPolygon confusion** - Remember that a plate may consist of multiple disconnected polygons\n","# Plate Tectonics Geospatial Analysis\n\n## Overview\nThe PB2002 (Plate Boundaries 2002) dataset provides comprehensive data on tectonic plate boundaries and plate definitions. This skill covers loading, processing, and spatial analysis of plate data.\n\n## PB2002 Dataset Structure\n\n### Boundary Data (PB2002_boundaries.json)\n```json\n{\n  \"type\": \"FeatureCollection\",\n  \"features\": [\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"LineString\",\n        \"coordinates\": [[lon1, lat1], [lon2, lat2], ...]\n      },\n      \"properties\": {\n        \"PLATE1\": \"Pacific\",\n        \"PLATE2\": \"North American\",\n        \"TYPE\": \"subduction zone\",  \u002F\u002F or \"transform\", \"spreading\", etc.\n        \"STEPOVER\": \"\"\n      }\n    }\n  ]\n}\n```\n\n### Plate Data (PB2002_plates.json)\n```json\n{\n  \"type\": \"FeatureCollection\",\n  \"features\": [\n    {\n      \"type\": \"Feature\",\n      \"geometry\": {\n        \"type\": \"MultiPolygon\",  \u002F\u002F or Polygon\n        \"coordinates\": [...]\n      },\n      \"properties\": {\n        \"PlateName\": \"Pacific\",\n        \"PlateID\": 101\n      }\n    }\n  ]\n}\n```\n\n## Loading and Processing\n\n### Load Plate Boundaries\n```python\nimport geopandas as gpd\nimport json\n\nwith open('\u002Froot\u002FPB2002_boundaries.json', 'r') as f:\n    boundaries_geojson = json.load(f)\n\nboundaries_gdf = gpd.GeoDataFrame.from_features(\n    boundaries_geojson['features'],\n    crs='EPSG:4326'\n)\n\n# Filter for specific plate boundary\npacific_boundaries = boundaries_gdf[\n    (boundaries_gdf['PLATE1'] == 'Pacific') |\n    (boundaries_gdf['PLATE2'] == 'Pacific')\n]\n```\n\n### Load Plate Polygons\n```python\nwith open('\u002Froot\u002FPB2002_plates.json', 'r') as f:\n    plates_geojson = json.load(f)\n\nplates_gdf = gpd.GeoDataFrame.from_features(\n    plates_geojson['features'],\n    crs='EPSG:4326'\n)\n\n# Get Pacific plate polygon\npacific_plate = plates_gdf[plates_gdf['PlateName'] == 'Pacific']\n```\n\n## Spatial Operations\n\n### Identify Points Within Plate\n```python\n# Use spatial join to find earthquakes within Pacific plate\nearthquakes_in_pacific = gpd.sjoin(\n    earthquakes_gdf,\n    pacific_plate,\n    how='inner',\n    predicate='within'\n)\n```\n\n### Calculate Distance to Boundary\n```python\n# For each earthquake, calculate minimum distance to boundary\ndef min_distance_to_boundary(point, boundary_lines_gdf):\n    \"\"\"Calculate minimum distance from point to any boundary line\"\"\"\n    min_dist = float('inf')\n    for idx, boundary in boundary_lines_gdf.iterrows():\n        dist = point.distance(boundary['geometry'])\n        if dist \u003C min_dist:\n            min_dist = dist\n    return min_dist\n\n# Apply to all earthquakes in the plate\n# First, project to projected CRS for accurate distance in km\nearthquakes_projected = earthquakes_in_pacific.to_crs('EPSG:3857')\nboundaries_projected = pacific_boundaries.to_crs('EPSG:3857')\n\nearthquakes_projected['distance_to_boundary'] = earthquakes_projected.geometry.apply(\n    lambda point: min_distance_to_boundary(point, boundaries_projected)\n)\n\n# Convert from meters to kilometers\nearthquakes_projected['distance_km'] = earthquakes_projected['distance_to_boundary'] \u002F 1000\n```\n\n### Find Maximum Distance\n```python\n# Find earthquake furthest from boundary\nfurthest_idx = earthquakes_projected['distance_km'].idxmax()\nfurthest_earthquake = earthquakes_projected.loc[furthest_idx]\n```\n\n## Important Considerations\n\n### Polygon Validation\n```python\n# Ensure polygons are valid before spatial operations\nif not plates_gdf.geometry.is_valid.all():\n    plates_gdf['geometry'] = plates_gdf.geometry.buffer(0)\n\nif not boundaries_gdf.geometry.is_valid.all():\n    boundaries_gdf['geometry'] = boundaries_gdf.geometry.buffer(0)\n```\n\n### Handling MultiPolygons\n```python\n# If a plate is represented as MultiPolygon, create a union\npacific_plate_union = pacific_plate.unary_union\n```\n\n### Projection for Accurate Distances\n```python\n# Use Web Mercator (EPSG:3857) for global distances in meters\n# Then convert to kilometers\n\n# For regional analysis, consider UTM zones\n# EPSG:32633 = UTM Zone 33N\n# EPSG:32733 = UTM Zone 33S\n```\n\n## Common Pitfalls\n1. **Not projecting before distance calculations** - Distances in geographic CRS are meaningless\n2. **Invalid geometries** - Use `.buffer(0)` to fix self-intersecting polygons\n3. **Antimeridian issues** - Points near ±180° longitude may have wrapping issues\n4. **MultiPolygon confusion** - Remember that a plate may consist of multiple disconnected polygons\n",{"name":5,"description":7},"main","726e1f79b96b0cb3d729d0e55a1c847e0b5353ae","skills\u002Fb1-one-shot-claude-haiku-4-5\u002Fearthquake-plate-calculation\u002Fplate-tectonics-geospatial",7,"https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench","https:\u002F\u002Fcxcscmu.github.io\u002FSkillLearnBench","https:\u002F\u002Fgithub.com\u002Fcxcscmu","2026-10-02 22:55:36",{"source":8,"skillName":5,"commands":39,"prompt":49,"zipAvailable":50},[40,43,46],{"tool":41,"command":42},"npx","npx skills add cxcscmu\u002FSkillLearnBench --skill plate-tectonics-geospatial",{"tool":44,"command":45},"bunx","bunx skills add cxcscmu\u002FSkillLearnBench --skill plate-tectonics-geospatial",{"tool":47,"command":48},"pnpm","pnpm dlx skills add cxcscmu\u002FSkillLearnBench --skill plate-tectonics-geospatial","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fb1-one-shot-claude-haiku-4-5\u002Fearthquake-plate-calculation\u002Fplate-tectonics-geospatial\u002FSKILL.md",true,[],[53,71,96,114,134,146],{"skillNo":54,"name":55,"nameZh":6,"description":56,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":57,"categories":58,"keywords":64,"publishedAt":25},"01M6KM5KH175P5ABP5JMX2SBDQ","object_counter","Count occurrences of an object in the image using computer vision algorithm.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Fvideo-object-counting\u002Fobject_counter\u002FSKILL.md",[59],{"categoryNo":60,"categoryName":61,"taxonomyType":62,"taxonomyTypeDesc":63},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[65,66,67,68,69,70],"object counter","object","vision","computer","Computer Vision","image",{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":80,"publishedAt":25},"01M6KM51TMVXG79MMPCS6Y8G86","travel-planning-workflow","Invoke this skill when performing travel planning. It defines a structured workflow for generating itineraries. Following this workflow is essential to ensure the final plan satisfies user requirements.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Ftravel-planning\u002Ftravel-planning-workflow\u002FSKILL.md",[77],{"categoryNo":78,"categoryName":79,"taxonomyType":62,"taxonomyTypeDesc":63},"01JBSEEDCAT000000000000023","Skill与智能体开发",[81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],"workflow","planning","planning workflow","travel","travel planning","travel planning workflow","structured","performing","plan","for","user","it","requirements","essential","itineraries",{"skillNo":97,"name":98,"nameZh":6,"description":99,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":102,"publishedAt":25},"01M6KM4DY820XHS9YTSK5QP5HD","bundled-dataset-search-tool","invoke this skill when you need to perform database search for travel planning. This skill provides some useful pre-packaged tools to look up accommodations, attractions, cities, driving distance, flights, and restaurants from the bundled dataset.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Ftravel-planning\u002Fbundled-dataset-search-tool\u002FSKILL.md",[],[103,104,105,106,107,108,109,84,110,111,85,112,90,113,82],"search","tool","dataset","bundled dataset search tool","restaurants","Tools","up","look","flights","you","database",{"skillNo":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":120,"publishedAt":25},"01M6KM465BB9PQ0B548HQSVAWZ","glm-output","Output-processing guidance for GLM tasks. Especially useful after glm-basics and glm-calibration when you need verifier-matching metrics from output.nc and a final \u002Froot\u002Fmetrics.json.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Ftemperature-simulation\u002Fglm-output\u002FSKILL.md",[],[121,122,123,90,124,125,126,127,128,129,130,131,112,132,133],"glm output","output","glm","tasks","metrics","json","basics","guidance","matching","verifier","processing","root","calibration",{"skillNo":135,"name":136,"nameZh":6,"description":137,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":138,"categories":139,"keywords":141,"publishedAt":25},"01M6KM40KY3QWDW5W97S39R2BC","glm-calibration","Calibration guidance for GLM tasks. Often most effective after glm-basics has clarified the setup; glm-output is the companion skill for exact final metric computation.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Ftemperature-simulation\u002Fglm-calibration\u002FSKILL.md",[140],{"categoryNo":78,"categoryName":79,"taxonomyType":62,"taxonomyTypeDesc":63},[142,133,123,122,128,127,124,143,144,90,145],"glm calibration","setup","companion","metric",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":152,"publishedAt":25},"01M6KM3VHHVSGMGHJQB3PPT6YG","glm-basics","A good starting point for GLM calibration tasks. Use to inspect glm3.nml, confirm how GLM runs, and identify the relevant files before moving on to calibration and output evaluation.","https:\u002F\u002Fgithub.com\u002Fcxcscmu\u002FSkillLearnBench\u002Fblob\u002Fmain\u002Fskills\u002Fhuman_authored\u002Ftemperature-simulation\u002Fglm-basics\u002FSKILL.md",[],[153,123,127,154,142,133,90,122,155,156,157,158,159,160,124],"glm basics","inspect","relevant","files","good","use","how","Evaluation"]