@wentorai/research-plugins 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +204 -0
  3. package/curated/analysis/README.md +64 -0
  4. package/curated/domains/README.md +104 -0
  5. package/curated/literature/README.md +53 -0
  6. package/curated/research/README.md +62 -0
  7. package/curated/tools/README.md +87 -0
  8. package/curated/writing/README.md +61 -0
  9. package/index.ts +39 -0
  10. package/mcp-configs/academic-db/ChatSpatial.json +17 -0
  11. package/mcp-configs/academic-db/academia-mcp.json +17 -0
  12. package/mcp-configs/academic-db/academic-paper-explorer.json +17 -0
  13. package/mcp-configs/academic-db/academic-search-mcp-server.json +17 -0
  14. package/mcp-configs/academic-db/agentinterviews-mcp.json +17 -0
  15. package/mcp-configs/academic-db/all-in-mcp.json +17 -0
  16. package/mcp-configs/academic-db/apple-health-mcp.json +17 -0
  17. package/mcp-configs/academic-db/arxiv-latex-mcp.json +17 -0
  18. package/mcp-configs/academic-db/arxiv-mcp-server.json +17 -0
  19. package/mcp-configs/academic-db/bgpt-mcp.json +17 -0
  20. package/mcp-configs/academic-db/biomcp.json +17 -0
  21. package/mcp-configs/academic-db/biothings-mcp.json +17 -0
  22. package/mcp-configs/academic-db/catalysishub-mcp-server.json +17 -0
  23. package/mcp-configs/academic-db/clinicaltrialsgov-mcp-server.json +17 -0
  24. package/mcp-configs/academic-db/deep-research-mcp.json +17 -0
  25. package/mcp-configs/academic-db/dicom-mcp.json +17 -0
  26. package/mcp-configs/academic-db/enrichr-mcp-server.json +17 -0
  27. package/mcp-configs/academic-db/fec-mcp-server.json +17 -0
  28. package/mcp-configs/academic-db/fhir-mcp-server-themomentum.json +17 -0
  29. package/mcp-configs/academic-db/fhir-mcp.json +19 -0
  30. package/mcp-configs/academic-db/gget-mcp.json +17 -0
  31. package/mcp-configs/academic-db/google-researcher-mcp.json +17 -0
  32. package/mcp-configs/academic-db/idea-reality-mcp.json +17 -0
  33. package/mcp-configs/academic-db/legiscan-mcp.json +19 -0
  34. package/mcp-configs/academic-db/lex.json +17 -0
  35. package/mcp-configs/ai-platform/Adaptive-Graph-of-Thoughts-MCP-server.json +17 -0
  36. package/mcp-configs/ai-platform/ai-counsel.json +17 -0
  37. package/mcp-configs/ai-platform/atlas-mcp-server.json +17 -0
  38. package/mcp-configs/ai-platform/counsel-mcp.json +17 -0
  39. package/mcp-configs/ai-platform/cross-llm-mcp.json +17 -0
  40. package/mcp-configs/ai-platform/gptr-mcp.json +17 -0
  41. package/mcp-configs/browser/decipher-research-agent.json +17 -0
  42. package/mcp-configs/browser/deep-research.json +17 -0
  43. package/mcp-configs/browser/everything-claude-code.json +17 -0
  44. package/mcp-configs/browser/gpt-researcher.json +17 -0
  45. package/mcp-configs/browser/heurist-agent-framework.json +17 -0
  46. package/mcp-configs/data-platform/4everland-hosting-mcp.json +17 -0
  47. package/mcp-configs/data-platform/context-keeper.json +17 -0
  48. package/mcp-configs/data-platform/context7.json +19 -0
  49. package/mcp-configs/data-platform/contextstream-mcp.json +17 -0
  50. package/mcp-configs/data-platform/email-mcp.json +17 -0
  51. package/mcp-configs/note-knowledge/ApeRAG.json +17 -0
  52. package/mcp-configs/note-knowledge/In-Memoria.json +17 -0
  53. package/mcp-configs/note-knowledge/agent-memory.json +17 -0
  54. package/mcp-configs/note-knowledge/aimemo.json +17 -0
  55. package/mcp-configs/note-knowledge/biel-mcp.json +19 -0
  56. package/mcp-configs/note-knowledge/cognee.json +17 -0
  57. package/mcp-configs/note-knowledge/context-awesome.json +17 -0
  58. package/mcp-configs/note-knowledge/context-mcp.json +17 -0
  59. package/mcp-configs/note-knowledge/conversation-handoff-mcp.json +17 -0
  60. package/mcp-configs/note-knowledge/cortex.json +17 -0
  61. package/mcp-configs/note-knowledge/devrag.json +17 -0
  62. package/mcp-configs/note-knowledge/easy-obsidian-mcp.json +17 -0
  63. package/mcp-configs/note-knowledge/engram.json +17 -0
  64. package/mcp-configs/note-knowledge/gnosis-mcp.json +17 -0
  65. package/mcp-configs/note-knowledge/graphlit-mcp-server.json +19 -0
  66. package/mcp-configs/reference-mgr/arxiv-cli.json +17 -0
  67. package/mcp-configs/reference-mgr/arxiv-search-mcp.json +17 -0
  68. package/mcp-configs/reference-mgr/chiken.json +17 -0
  69. package/mcp-configs/reference-mgr/claude-scholar.json +17 -0
  70. package/mcp-configs/reference-mgr/devonthink-mcp.json +17 -0
  71. package/mcp-configs/registry.json +447 -0
  72. package/openclaw.plugin.json +21 -0
  73. package/package.json +61 -0
  74. package/skills/analysis/dataviz/color-accessibility-guide/SKILL.md +230 -0
  75. package/skills/analysis/dataviz/geospatial-viz-guide/SKILL.md +218 -0
  76. package/skills/analysis/dataviz/interactive-viz-guide/SKILL.md +287 -0
  77. package/skills/analysis/dataviz/network-visualization-guide/SKILL.md +195 -0
  78. package/skills/analysis/dataviz/publication-figures-guide/SKILL.md +238 -0
  79. package/skills/analysis/dataviz/python-dataviz-guide/SKILL.md +195 -0
  80. package/skills/analysis/econometrics/causal-inference-guide/SKILL.md +197 -0
  81. package/skills/analysis/econometrics/iv-regression-guide/SKILL.md +198 -0
  82. package/skills/analysis/econometrics/panel-data-guide/SKILL.md +274 -0
  83. package/skills/analysis/econometrics/robustness-checks/SKILL.md +250 -0
  84. package/skills/analysis/econometrics/stata-regression/SKILL.md +117 -0
  85. package/skills/analysis/econometrics/time-series-guide/SKILL.md +235 -0
  86. package/skills/analysis/statistics/bayesian-statistics-guide/SKILL.md +221 -0
  87. package/skills/analysis/statistics/hypothesis-testing-guide/SKILL.md +210 -0
  88. package/skills/analysis/statistics/meta-analysis-guide/SKILL.md +206 -0
  89. package/skills/analysis/statistics/nonparametric-tests-guide/SKILL.md +221 -0
  90. package/skills/analysis/statistics/power-analysis-guide/SKILL.md +240 -0
  91. package/skills/analysis/statistics/sem-guide/SKILL.md +231 -0
  92. package/skills/analysis/statistics/survival-analysis-guide/SKILL.md +195 -0
  93. package/skills/analysis/wrangling/missing-data-handling/SKILL.md +224 -0
  94. package/skills/analysis/wrangling/pandas-data-wrangling/SKILL.md +242 -0
  95. package/skills/analysis/wrangling/questionnaire-design-guide/SKILL.md +234 -0
  96. package/skills/analysis/wrangling/text-mining-guide/SKILL.md +225 -0
  97. package/skills/domains/ai-ml/computer-vision-guide/SKILL.md +213 -0
  98. package/skills/domains/ai-ml/deep-learning-papers-guide/SKILL.md +200 -0
  99. package/skills/domains/ai-ml/llm-evaluation-guide/SKILL.md +194 -0
  100. package/skills/domains/ai-ml/prompt-engineering-research/SKILL.md +233 -0
  101. package/skills/domains/ai-ml/reinforcement-learning-guide/SKILL.md +254 -0
  102. package/skills/domains/ai-ml/transformer-architecture-guide/SKILL.md +233 -0
  103. package/skills/domains/biomedical/clinical-research-guide/SKILL.md +232 -0
  104. package/skills/domains/biomedical/clinicaltrials-api/SKILL.md +177 -0
  105. package/skills/domains/biomedical/epidemiology-guide/SKILL.md +200 -0
  106. package/skills/domains/biomedical/genomics-analysis-guide/SKILL.md +270 -0
  107. package/skills/domains/business/market-analysis-guide/SKILL.md +112 -0
  108. package/skills/domains/business/strategic-management-guide/SKILL.md +154 -0
  109. package/skills/domains/chemistry/computational-chemistry-guide/SKILL.md +266 -0
  110. package/skills/domains/chemistry/retrosynthesis-guide/SKILL.md +215 -0
  111. package/skills/domains/cs/algorithms-complexity-guide/SKILL.md +194 -0
  112. package/skills/domains/cs/dblp-api/SKILL.md +129 -0
  113. package/skills/domains/cs/software-engineering-research/SKILL.md +218 -0
  114. package/skills/domains/ecology/biodiversity-data-guide/SKILL.md +296 -0
  115. package/skills/domains/ecology/conservation-biology-guide/SKILL.md +198 -0
  116. package/skills/domains/ecology/gbif-api/SKILL.md +158 -0
  117. package/skills/domains/ecology/inaturalist-api/SKILL.md +173 -0
  118. package/skills/domains/economics/behavioral-economics-guide/SKILL.md +239 -0
  119. package/skills/domains/economics/development-economics-guide/SKILL.md +181 -0
  120. package/skills/domains/economics/fred-api/SKILL.md +189 -0
  121. package/skills/domains/education/curriculum-design-guide/SKILL.md +144 -0
  122. package/skills/domains/education/learning-science-guide/SKILL.md +150 -0
  123. package/skills/domains/finance/financial-data-analysis/SKILL.md +152 -0
  124. package/skills/domains/finance/quantitative-finance-guide/SKILL.md +151 -0
  125. package/skills/domains/geoscience/climate-science-guide/SKILL.md +158 -0
  126. package/skills/domains/geoscience/gis-remote-sensing-guide/SKILL.md +129 -0
  127. package/skills/domains/humanities/digital-humanities-guide/SKILL.md +181 -0
  128. package/skills/domains/humanities/philosophy-research-guide/SKILL.md +148 -0
  129. package/skills/domains/law/courtlistener-api/SKILL.md +213 -0
  130. package/skills/domains/law/legal-research-guide/SKILL.md +250 -0
  131. package/skills/domains/math/linear-algebra-applications/SKILL.md +227 -0
  132. package/skills/domains/math/numerical-methods-guide/SKILL.md +236 -0
  133. package/skills/domains/math/oeis-api/SKILL.md +158 -0
  134. package/skills/domains/pharma/clinical-pharmacology-guide/SKILL.md +165 -0
  135. package/skills/domains/pharma/drug-development-guide/SKILL.md +177 -0
  136. package/skills/domains/physics/computational-physics-guide/SKILL.md +300 -0
  137. package/skills/domains/physics/nasa-ads-api/SKILL.md +150 -0
  138. package/skills/domains/physics/quantum-computing-guide/SKILL.md +234 -0
  139. package/skills/domains/social-science/social-research-methods/SKILL.md +194 -0
  140. package/skills/domains/social-science/survey-research-guide/SKILL.md +182 -0
  141. package/skills/literature/discovery/citation-alert-guide/SKILL.md +154 -0
  142. package/skills/literature/discovery/conference-proceedings-guide/SKILL.md +142 -0
  143. package/skills/literature/discovery/literature-mapping-guide/SKILL.md +175 -0
  144. package/skills/literature/discovery/paper-tracking-guide/SKILL.md +211 -0
  145. package/skills/literature/discovery/rss-paper-feeds/SKILL.md +214 -0
  146. package/skills/literature/discovery/semantic-scholar-recs-guide/SKILL.md +164 -0
  147. package/skills/literature/fulltext/doaj-api/SKILL.md +120 -0
  148. package/skills/literature/fulltext/interlibrary-loan-guide/SKILL.md +163 -0
  149. package/skills/literature/fulltext/open-access-guide/SKILL.md +183 -0
  150. package/skills/literature/fulltext/pmc-oai-api/SKILL.md +184 -0
  151. package/skills/literature/fulltext/preprint-servers-guide/SKILL.md +128 -0
  152. package/skills/literature/fulltext/repository-harvesting-guide/SKILL.md +207 -0
  153. package/skills/literature/fulltext/unpaywall-api/SKILL.md +113 -0
  154. package/skills/literature/metadata/altmetrics-guide/SKILL.md +132 -0
  155. package/skills/literature/metadata/citation-network-guide/SKILL.md +236 -0
  156. package/skills/literature/metadata/crossref-api/SKILL.md +133 -0
  157. package/skills/literature/metadata/datacite-api/SKILL.md +126 -0
  158. package/skills/literature/metadata/doi-resolution-guide/SKILL.md +168 -0
  159. package/skills/literature/metadata/h-index-guide/SKILL.md +183 -0
  160. package/skills/literature/metadata/journal-metrics-guide/SKILL.md +188 -0
  161. package/skills/literature/metadata/opencitations-api/SKILL.md +128 -0
  162. package/skills/literature/metadata/orcid-api/SKILL.md +136 -0
  163. package/skills/literature/metadata/orcid-integration-guide/SKILL.md +178 -0
  164. package/skills/literature/search/arxiv-api/SKILL.md +95 -0
  165. package/skills/literature/search/biorxiv-api/SKILL.md +123 -0
  166. package/skills/literature/search/boolean-search-guide/SKILL.md +199 -0
  167. package/skills/literature/search/citation-chaining-guide/SKILL.md +148 -0
  168. package/skills/literature/search/database-comparison-guide/SKILL.md +100 -0
  169. package/skills/literature/search/europe-pmc-api/SKILL.md +120 -0
  170. package/skills/literature/search/google-scholar-guide/SKILL.md +182 -0
  171. package/skills/literature/search/mesh-terms-guide/SKILL.md +164 -0
  172. package/skills/literature/search/openalex-api/SKILL.md +134 -0
  173. package/skills/literature/search/pubmed-api/SKILL.md +130 -0
  174. package/skills/literature/search/scientify-literature-survey/SKILL.md +203 -0
  175. package/skills/literature/search/semantic-scholar-api/SKILL.md +134 -0
  176. package/skills/literature/search/systematic-search-strategy/SKILL.md +214 -0
  177. package/skills/research/automation/ai-scientist-guide/SKILL.md +228 -0
  178. package/skills/research/automation/data-collection-automation/SKILL.md +248 -0
  179. package/skills/research/automation/research-workflow-automation/SKILL.md +266 -0
  180. package/skills/research/deep-research/meta-synthesis-guide/SKILL.md +174 -0
  181. package/skills/research/deep-research/research-cog/SKILL.md +153 -0
  182. package/skills/research/deep-research/scoping-review-guide/SKILL.md +217 -0
  183. package/skills/research/deep-research/systematic-review-guide/SKILL.md +250 -0
  184. package/skills/research/funding/figshare-api/SKILL.md +163 -0
  185. package/skills/research/funding/grant-writing-guide/SKILL.md +233 -0
  186. package/skills/research/funding/nsf-grant-guide/SKILL.md +206 -0
  187. package/skills/research/funding/open-science-guide/SKILL.md +255 -0
  188. package/skills/research/funding/zenodo-api/SKILL.md +174 -0
  189. package/skills/research/methodology/action-research-guide/SKILL.md +201 -0
  190. package/skills/research/methodology/experimental-design-guide/SKILL.md +236 -0
  191. package/skills/research/methodology/grad-school-guide/SKILL.md +182 -0
  192. package/skills/research/methodology/grounded-theory-guide/SKILL.md +171 -0
  193. package/skills/research/methodology/mixed-methods-guide/SKILL.md +208 -0
  194. package/skills/research/methodology/qualitative-research-guide/SKILL.md +234 -0
  195. package/skills/research/methodology/scientify-idea-generation/SKILL.md +222 -0
  196. package/skills/research/paper-review/paper-reading-assistant/SKILL.md +266 -0
  197. package/skills/research/paper-review/peer-review-guide/SKILL.md +227 -0
  198. package/skills/research/paper-review/rebuttal-writing-guide/SKILL.md +185 -0
  199. package/skills/research/paper-review/scientify-write-review-paper/SKILL.md +209 -0
  200. package/skills/tools/code-exec/jupyter-notebook-guide/SKILL.md +178 -0
  201. package/skills/tools/code-exec/python-reproducibility-guide/SKILL.md +341 -0
  202. package/skills/tools/code-exec/r-reproducibility-guide/SKILL.md +236 -0
  203. package/skills/tools/code-exec/sandbox-execution-guide/SKILL.md +221 -0
  204. package/skills/tools/diagram/mermaid-diagram-guide/SKILL.md +269 -0
  205. package/skills/tools/diagram/plantuml-guide/SKILL.md +397 -0
  206. package/skills/tools/diagram/scientific-illustration-guide/SKILL.md +225 -0
  207. package/skills/tools/document/anystyle-api/SKILL.md +199 -0
  208. package/skills/tools/document/grobid-pdf-parsing/SKILL.md +294 -0
  209. package/skills/tools/document/markdown-academic-guide/SKILL.md +217 -0
  210. package/skills/tools/document/pdf-extraction-guide/SKILL.md +321 -0
  211. package/skills/tools/knowledge-graph/knowledge-graph-construction/SKILL.md +306 -0
  212. package/skills/tools/knowledge-graph/ontology-design-guide/SKILL.md +214 -0
  213. package/skills/tools/knowledge-graph/rag-methodology-guide/SKILL.md +325 -0
  214. package/skills/tools/ocr-translate/formula-recognition-guide/SKILL.md +367 -0
  215. package/skills/tools/ocr-translate/handwriting-recognition-guide/SKILL.md +211 -0
  216. package/skills/tools/ocr-translate/latex-ocr-guide/SKILL.md +204 -0
  217. package/skills/tools/ocr-translate/multilingual-research-guide/SKILL.md +234 -0
  218. package/skills/tools/scraping/academic-web-scraping/SKILL.md +326 -0
  219. package/skills/tools/scraping/api-data-collection-guide/SKILL.md +301 -0
  220. package/skills/tools/scraping/web-scraping-ethics-guide/SKILL.md +250 -0
  221. package/skills/writing/citation/bibtex-management-guide/SKILL.md +246 -0
  222. package/skills/writing/citation/citation-style-guide/SKILL.md +248 -0
  223. package/skills/writing/citation/reference-manager-comparison/SKILL.md +208 -0
  224. package/skills/writing/citation/zotero-api/SKILL.md +188 -0
  225. package/skills/writing/composition/abstract-writing-guide/SKILL.md +188 -0
  226. package/skills/writing/composition/discussion-writing-guide/SKILL.md +194 -0
  227. package/skills/writing/composition/introduction-writing-guide/SKILL.md +194 -0
  228. package/skills/writing/composition/literature-review-writing/SKILL.md +196 -0
  229. package/skills/writing/composition/methods-section-guide/SKILL.md +185 -0
  230. package/skills/writing/composition/response-to-reviewers/SKILL.md +215 -0
  231. package/skills/writing/composition/scientific-writing-guide/SKILL.md +152 -0
  232. package/skills/writing/latex/bibliography-management-guide/SKILL.md +206 -0
  233. package/skills/writing/latex/latex-drawing-guide/SKILL.md +234 -0
  234. package/skills/writing/latex/latex-ecosystem-guide/SKILL.md +240 -0
  235. package/skills/writing/latex/math-typesetting-guide/SKILL.md +231 -0
  236. package/skills/writing/latex/overleaf-collaboration-guide/SKILL.md +211 -0
  237. package/skills/writing/latex/tikz-diagrams-guide/SKILL.md +211 -0
  238. package/skills/writing/polish/academic-translation-guide/SKILL.md +175 -0
  239. package/skills/writing/polish/academic-writing-refiner/SKILL.md +143 -0
  240. package/skills/writing/polish/ai-writing-humanizer/SKILL.md +178 -0
  241. package/skills/writing/polish/grammar-checker-guide/SKILL.md +184 -0
  242. package/skills/writing/polish/plagiarism-detection-guide/SKILL.md +167 -0
  243. package/skills/writing/templates/beamer-presentation-guide/SKILL.md +263 -0
  244. package/skills/writing/templates/conference-paper-template/SKILL.md +219 -0
  245. package/skills/writing/templates/thesis-template-guide/SKILL.md +200 -0
  246. package/skills/writing/templates/thesis-writing-guide/SKILL.md +220 -0
  247. package/src/tools/arxiv.ts +131 -0
  248. package/src/tools/crossref.ts +112 -0
  249. package/src/tools/openalex.ts +174 -0
  250. package/src/tools/pubmed.ts +166 -0
  251. package/src/tools/semantic-scholar.ts +108 -0
  252. package/src/tools/unpaywall.ts +58 -0
@@ -0,0 +1,296 @@
1
+ ---
2
+ name: biodiversity-data-guide
3
+ description: "Biodiversity data access, species occurrence, and ecological tools"
4
+ metadata:
5
+ openclaw:
6
+ emoji: "leaf"
7
+ category: "domains"
8
+ subcategory: "ecology"
9
+ keywords: ["biodiversity", "taxonomy", "ecology", "evolutionary biology"]
10
+ source: "wentor-research-plugins"
11
+ ---
12
+
13
+ # Biodiversity Data Guide
14
+
15
+ Access, analyze, and visualize biodiversity data from global databases including GBIF, iNaturalist, and GenBank for ecological and evolutionary research.
16
+
17
+ ## Major Biodiversity Data Sources
18
+
19
+ | Database | Content | Records | API | Cost |
20
+ |----------|---------|---------|-----|------|
21
+ | GBIF | Species occurrence records | 2.4B+ | Yes | Free |
22
+ | iNaturalist | Citizen science observations | 180M+ | Yes | Free |
23
+ | GenBank (NCBI) | Genetic sequences | 250M+ | Yes | Free |
24
+ | BOLD Systems | DNA barcode records | 15M+ | Yes | Free |
25
+ | eBird | Bird observations | 1.3B+ | Yes | Free |
26
+ | IUCN Red List | Conservation status | 160,000+ | Yes | Free (with key) |
27
+ | OBIS | Marine biodiversity | 100M+ | Yes | Free |
28
+ | Catalogue of Life | Taxonomic backbone | 2M+ species | Yes | Free |
29
+ | TRY Plant Trait | Plant functional traits | 12M+ | Request | Free |
30
+ | WorldClim | Climate data (rasters) | Global | Download | Free |
31
+
32
+ ## Querying GBIF (Species Occurrences)
33
+
34
+ ### Python (pygbif)
35
+
36
+ ```python
37
+ from pygbif import species as sp
38
+ from pygbif import occurrences as occ
39
+
40
+ # Search for a species by name
41
+ name_result = sp.name_backbone(name="Panthera tigris", rank="species")
42
+ taxon_key = name_result["usageKey"]
43
+ print(f"GBIF taxon key: {taxon_key}")
44
+ print(f"Status: {name_result['status']}")
45
+ print(f"Kingdom: {name_result['kingdom']}")
46
+
47
+ # Get occurrence records
48
+ results = occ.search(
49
+ taxonKey=taxon_key,
50
+ hasCoordinate=True, # Only georeferenced records
51
+ country="IN", # India
52
+ limit=100,
53
+ year="2020,2024", # Year range
54
+ basisOfRecord="HUMAN_OBSERVATION"
55
+ )
56
+
57
+ print(f"Total records matching: {results['count']}")
58
+ for record in results["results"][:5]:
59
+ print(f" [{record.get('year')}] {record.get('decimalLatitude'):.4f}, "
60
+ f"{record.get('decimalLongitude'):.4f} - {record.get('datasetName', 'N/A')}")
61
+ ```
62
+
63
+ ### R (rgbif)
64
+
65
+ ```r
66
+ library(rgbif)
67
+ library(sf)
68
+ library(ggplot2)
69
+
70
+ # Get occurrence data
71
+ tiger_key <- name_backbone(name = "Panthera tigris")$usageKey
72
+
73
+ occurrences <- occ_search(
74
+ taxonKey = tiger_key,
75
+ hasCoordinate = TRUE,
76
+ limit = 500,
77
+ year = "2020,2024",
78
+ basisOfRecord = "HUMAN_OBSERVATION"
79
+ )
80
+
81
+ # Convert to spatial data
82
+ occ_df <- occurrences$data
83
+ coords <- occ_df[, c("decimalLongitude", "decimalLatitude")]
84
+ occ_sf <- st_as_sf(coords, coords = c("decimalLongitude", "decimalLatitude"),
85
+ crs = 4326)
86
+
87
+ # Map occurrences
88
+ world <- rnaturalearth::ne_countries(scale = "medium", returnclass = "sf")
89
+ ggplot() +
90
+ geom_sf(data = world, fill = "grey90") +
91
+ geom_sf(data = occ_sf, color = "red", size = 1, alpha = 0.5) +
92
+ coord_sf(xlim = c(60, 150), ylim = c(-10, 50)) +
93
+ labs(title = "Panthera tigris occurrences (2020-2024)") +
94
+ theme_minimal()
95
+ ggsave("tiger_map.pdf", width = 10, height = 6)
96
+ ```
97
+
98
+ ## Species Distribution Modeling
99
+
100
+ ### MaxEnt Workflow
101
+
102
+ ```r
103
+ library(dismo)
104
+ library(raster)
105
+
106
+ # 1. Get occurrence data
107
+ occ_data <- occ_search(taxonKey = tiger_key, hasCoordinate = TRUE,
108
+ limit = 1000)$data
109
+ occ_points <- occ_data[, c("decimalLongitude", "decimalLatitude")]
110
+ occ_points <- na.omit(occ_points)
111
+
112
+ # 2. Get environmental predictors (WorldClim bioclimatic variables)
113
+ bioclim <- getData("worldclim", var = "bio", res = 10)
114
+ # bio1 = Annual Mean Temperature
115
+ # bio12 = Annual Precipitation
116
+ # bio4 = Temperature Seasonality
117
+ # ... (19 bioclimatic variables total)
118
+
119
+ # 3. Extract environmental values at occurrence points
120
+ env_values <- extract(bioclim, occ_points)
121
+
122
+ # 4. Generate background (pseudo-absence) points
123
+ bg_points <- randomPoints(bioclim, n = 10000)
124
+
125
+ # 5. Fit MaxEnt model
126
+ me_model <- maxent(bioclim, occ_points, a = bg_points,
127
+ args = c("betamultiplier=1.5",
128
+ "responsecurves=true"))
129
+
130
+ # 6. Predict habitat suitability
131
+ prediction <- predict(me_model, bioclim)
132
+ plot(prediction, main = "Predicted Habitat Suitability")
133
+ points(occ_points, pch = 16, cex = 0.5)
134
+
135
+ # 7. Evaluate model
136
+ eval_result <- evaluate(me_model, p = occ_points, a = bg_points,
137
+ x = bioclim)
138
+ print(paste("AUC:", round(eval_result@auc, 3)))
139
+ ```
140
+
141
+ ## Phylogenetic Analysis
142
+
143
+ ### Building a Phylogeny
144
+
145
+ ```r
146
+ library(ape)
147
+ library(phytools)
148
+
149
+ # Read alignment (FASTA format)
150
+ alignment <- read.FASTA("aligned_sequences.fasta")
151
+
152
+ # Distance-based tree (Neighbor-Joining)
153
+ dist_matrix <- dist.dna(alignment, model = "TN93")
154
+ nj_tree <- nj(dist_matrix)
155
+
156
+ # Root the tree
157
+ rooted_tree <- root(nj_tree, outgroup = "outgroup_species")
158
+
159
+ # Plot phylogeny
160
+ plot(rooted_tree, type = "phylogram", cex = 0.8)
161
+ axisPhylo()
162
+
163
+ # Maximum likelihood tree (using phangorn)
164
+ library(phangorn)
165
+ data_phyDat <- phyDat(alignment, type = "DNA")
166
+ ml_tree <- pml_bb(data_phyDat, model = "GTR+G+I",
167
+ rearrangement = "NNI")
168
+ ```
169
+
170
+ ### Comparative Methods
171
+
172
+ ```r
173
+ library(caper)
174
+
175
+ # Phylogenetic independent contrasts
176
+ # Test whether body mass predicts home range size
177
+ # while accounting for phylogenetic relatedness
178
+
179
+ trait_data <- data.frame(
180
+ species = c("Sp_A", "Sp_B", "Sp_C", "Sp_D"),
181
+ body_mass = c(5.2, 12.1, 3.8, 45.0),
182
+ home_range = c(10, 25, 8, 120)
183
+ )
184
+
185
+ # Create comparative data object
186
+ comp_data <- comparative.data(
187
+ phy = rooted_tree,
188
+ data = trait_data,
189
+ names.col = species,
190
+ vcv = TRUE
191
+ )
192
+
193
+ # Phylogenetic Generalized Least Squares (PGLS)
194
+ pgls_model <- pgls(log(home_range) ~ log(body_mass),
195
+ data = comp_data,
196
+ lambda = "ML") # Estimate Pagel's lambda
197
+ summary(pgls_model)
198
+ ```
199
+
200
+ ## Ecological Data Analysis
201
+
202
+ ### Diversity Metrics
203
+
204
+ ```python
205
+ import numpy as np
206
+ from scipy.stats import entropy
207
+
208
+ def calculate_diversity(abundance_vector):
209
+ """Calculate common biodiversity metrics."""
210
+ n = np.array(abundance_vector)
211
+ N = n.sum()
212
+ p = n / N # Relative abundances
213
+ p = p[p > 0] # Remove zeros
214
+
215
+ return {
216
+ "species_richness": len(n[n > 0]),
217
+ "shannon_H": entropy(p, base=np.e),
218
+ "simpson_D": 1 - np.sum(p**2),
219
+ "evenness_J": entropy(p, base=np.e) / np.log(len(p)),
220
+ "fisher_alpha": estimate_fisher_alpha(n),
221
+ "total_abundance": int(N)
222
+ }
223
+
224
+ def estimate_fisher_alpha(n):
225
+ """Estimate Fisher's alpha diversity parameter."""
226
+ from scipy.optimize import brentq
227
+ S = len(n[n > 0])
228
+ N = n.sum()
229
+ def equation(alpha):
230
+ return alpha * np.log(1 + N/alpha) - S
231
+ try:
232
+ return brentq(equation, 0.1, 1000)
233
+ except ValueError:
234
+ return np.nan
235
+
236
+ # Example: Bird community survey
237
+ abundances = [45, 23, 12, 8, 5, 3, 2, 1, 1]
238
+ metrics = calculate_diversity(abundances)
239
+ for key, val in metrics.items():
240
+ print(f" {key}: {val:.4f}" if isinstance(val, float) else f" {key}: {val}")
241
+ ```
242
+
243
+ ### Community Analysis
244
+
245
+ ```r
246
+ library(vegan)
247
+
248
+ # Species abundance matrix (sites x species)
249
+ community <- matrix(c(
250
+ 10, 5, 3, 0, 1,
251
+ 8, 12, 0, 2, 3,
252
+ 0, 1, 15, 8, 0,
253
+ 2, 0, 12, 10, 1
254
+ ), nrow = 4, byrow = TRUE,
255
+ dimnames = list(paste0("Site", 1:4), paste0("Sp", 1:5)))
256
+
257
+ # Alpha diversity
258
+ diversity(community, index = "shannon") # Shannon H
259
+ diversity(community, index = "simpson") # Simpson 1-D
260
+
261
+ # Beta diversity (Bray-Curtis dissimilarity)
262
+ bc_dist <- vegdist(community, method = "bray")
263
+
264
+ # NMDS ordination
265
+ nmds <- metaMDS(community, distance = "bray", k = 2)
266
+ plot(nmds, type = "t")
267
+
268
+ # PERMANOVA (testing group differences)
269
+ env_data <- data.frame(habitat = c("forest", "forest", "grassland", "grassland"))
270
+ adonis2(community ~ habitat, data = env_data, method = "bray")
271
+ ```
272
+
273
+ ## Data Standards and Best Practices
274
+
275
+ ### Darwin Core Standard
276
+
277
+ Darwin Core (DwC) is the standard schema for biodiversity data exchange:
278
+
279
+ | Term | Description | Example |
280
+ |------|-------------|---------|
281
+ | `scientificName` | Full taxonomic name | "Panthera tigris (Linnaeus, 1758)" |
282
+ | `decimalLatitude` | Latitude in decimal degrees | 27.1751 |
283
+ | `decimalLongitude` | Longitude in decimal degrees | 78.0421 |
284
+ | `eventDate` | Date of observation | "2024-03-15" |
285
+ | `basisOfRecord` | Type of record | "HUMAN_OBSERVATION" |
286
+ | `coordinateUncertaintyInMeters` | Spatial precision | 100 |
287
+ | `institutionCode` | Data provider | "iNaturalist" |
288
+
289
+ ### Data Quality Checks
290
+
291
+ 1. **Coordinate validation**: Flag points in oceans for terrestrial species (and vice versa)
292
+ 2. **Taxonomic verification**: Match names against Catalogue of Life or GBIF backbone
293
+ 3. **Temporal consistency**: Remove records with impossible dates
294
+ 4. **Duplicate detection**: Remove spatial and temporal duplicates
295
+ 5. **Environmental outliers**: Flag occurrences in climatically unsuitable areas
296
+ 6. **Sampling bias correction**: Use spatial thinning or bias files in SDMs
@@ -0,0 +1,198 @@
1
+ ---
2
+ name: conservation-biology-guide
3
+ description: "Apply conservation biology methods, databases, and assessment tools"
4
+ metadata:
5
+ openclaw:
6
+ emoji: "deciduous_tree"
7
+ category: "domains"
8
+ subcategory: "ecology"
9
+ keywords: ["conservation biology", "biodiversity", "IUCN Red List", "species assessment", "habitat modeling", "wildlife"]
10
+ source: "wentor-research-plugins"
11
+ ---
12
+
13
+ # Conservation Biology Guide
14
+
15
+ A skill for conducting conservation biology research, covering species assessment methods, habitat modeling, population viability analysis, key biodiversity databases, and frameworks for conservation prioritization.
16
+
17
+ ## Species Assessment and Red List
18
+
19
+ ### IUCN Red List Categories
20
+
21
+ ```
22
+ Extinction Risk Categories (from highest to lowest):
23
+
24
+ EX - Extinct
25
+ EW - Extinct in the Wild
26
+ CR - Critically Endangered
27
+ EN - Endangered
28
+ VU - Vulnerable
29
+ NT - Near Threatened
30
+ LC - Least Concern
31
+ DD - Data Deficient
32
+ NE - Not Evaluated
33
+
34
+ Classification criteria (any one triggers the category):
35
+ A: Population size reduction
36
+ B: Geographic range (extent of occurrence, area of occupancy)
37
+ C: Small population size and decline
38
+ D: Very small or restricted population
39
+ E: Quantitative extinction probability analysis
40
+ ```
41
+
42
+ ### Querying the IUCN API
43
+
44
+ ```python
45
+ import os
46
+ import json
47
+ import urllib.request
48
+
49
+
50
+ def get_species_assessment(species_name: str) -> dict:
51
+ """
52
+ Retrieve IUCN Red List assessment for a species.
53
+
54
+ Args:
55
+ species_name: Scientific name (e.g., 'Panthera tigris')
56
+ """
57
+ api_token = os.environ["IUCN_API_TOKEN"]
58
+ encoded_name = urllib.parse.quote(species_name)
59
+ url = f"https://apiv3.iucnredlist.org/api/v3/species/{encoded_name}?token={api_token}"
60
+
61
+ req = urllib.request.Request(url)
62
+ response = urllib.request.urlopen(req)
63
+ data = json.loads(response.read())
64
+
65
+ if data.get("result"):
66
+ species = data["result"][0]
67
+ return {
68
+ "scientific_name": species.get("scientific_name"),
69
+ "common_name": species.get("main_common_name"),
70
+ "category": species.get("category"),
71
+ "population_trend": species.get("population_trend"),
72
+ "assessment_date": species.get("assessment_date"),
73
+ "criteria": species.get("criteria")
74
+ }
75
+
76
+ return {"error": "Species not found in IUCN Red List"}
77
+ ```
78
+
79
+ ## Habitat Modeling
80
+
81
+ ### Species Distribution Models (SDMs)
82
+
83
+ ```python
84
+ def sdm_workflow(occurrence_data: list[tuple],
85
+ environmental_layers: list[str],
86
+ method: str = "maxent") -> dict:
87
+ """
88
+ Outline a species distribution modeling workflow.
89
+
90
+ Args:
91
+ occurrence_data: List of (latitude, longitude) tuples
92
+ environmental_layers: List of environmental raster file paths
93
+ method: Modeling method (maxent, glm, rf, boosted_regression)
94
+ """
95
+ return {
96
+ "data_preparation": {
97
+ "occurrences": len(occurrence_data),
98
+ "environmental_variables": len(environmental_layers),
99
+ "steps": [
100
+ "Clean occurrence records (remove duplicates, spatial outliers)",
101
+ "Thin records to reduce spatial autocorrelation (1 per grid cell)",
102
+ "Generate pseudo-absences or background points",
103
+ "Extract environmental values at occurrence/absence points",
104
+ "Check for multicollinearity (VIF < 10)"
105
+ ]
106
+ },
107
+ "modeling": {
108
+ "method": method,
109
+ "methods_available": {
110
+ "maxent": "Maximum entropy (presence-only, widely used)",
111
+ "glm": "Generalized linear model (presence-absence)",
112
+ "rf": "Random forest (handles non-linearities)",
113
+ "boosted_regression": "BRT (good predictive performance)",
114
+ "ensemble": "Combine multiple methods for robustness"
115
+ }
116
+ },
117
+ "validation": {
118
+ "metrics": ["AUC-ROC", "TSS (True Skill Statistic)", "Boyce Index"],
119
+ "methods": [
120
+ "k-fold cross-validation",
121
+ "Spatial block cross-validation (reduces spatial autocorrelation bias)",
122
+ "Independent validation dataset (ideal)"
123
+ ]
124
+ },
125
+ "projection": {
126
+ "current": "Map current suitable habitat",
127
+ "future": "Project under climate change scenarios (SSP1-2.6, SSP5-8.5)",
128
+ "note": "Report uncertainty across climate models and scenarios"
129
+ }
130
+ }
131
+ ```
132
+
133
+ ## Population Viability Analysis (PVA)
134
+
135
+ ### Estimating Extinction Risk
136
+
137
+ ```
138
+ PVA simulates population dynamics to estimate extinction probability
139
+ over a given time horizon.
140
+
141
+ Key inputs:
142
+ - Current population size and structure (age/stage)
143
+ - Vital rates: survival, fecundity (with variance)
144
+ - Carrying capacity and density dependence
145
+ - Environmental and demographic stochasticity
146
+ - Catastrophe frequency and severity
147
+ - Genetic factors (inbreeding depression)
148
+
149
+ Common software:
150
+ - Vortex: Individual-based PVA simulation
151
+ - RAMAS GIS: Spatially explicit PVA
152
+ - R packages: popbio, lefko3, Compadre for matrix models
153
+
154
+ Outputs:
155
+ - Probability of extinction over T years
156
+ - Expected minimum population size
157
+ - Population growth rate (lambda) and its variance
158
+ - Sensitivity of persistence to management actions
159
+ ```
160
+
161
+ ## Key Databases
162
+
163
+ ### Biodiversity Data Sources
164
+
165
+ | Database | Content | Access |
166
+ |----------|---------|--------|
167
+ | GBIF | 2+ billion species occurrence records | Free (gbif.org) |
168
+ | IUCN Red List | Species assessments and distributions | API + download |
169
+ | BIEN | Plant occurrence and trait data (Americas) | Free (biendata.org) |
170
+ | eBird | Bird observations worldwide | Free (ebird.org) |
171
+ | Protected Planet (WDPA) | Global protected area boundaries | Free (protectedplanet.net) |
172
+ | WorldClim | Current and future climate layers | Free (worldclim.org) |
173
+ | CHELSA | High-resolution climate data | Free (chelsa-climate.org) |
174
+ | Global Forest Watch | Forest cover change | Free (globalforestwatch.org) |
175
+
176
+ ## Conservation Prioritization
177
+
178
+ ### Frameworks for Decision-Making
179
+
180
+ ```
181
+ Systematic Conservation Planning (Margules & Pressey):
182
+ 1. Compile data on biodiversity features and their distributions
183
+ 2. Set conservation targets for each feature
184
+ 3. Review existing protected area coverage
185
+ 4. Select additional areas using optimization (e.g., Marxan, Zonation)
186
+ 5. Implement and manage conservation actions
187
+ 6. Monitor outcomes and adapt
188
+
189
+ Key principles:
190
+ - Representativeness: All species/habitats should be represented
191
+ - Complementarity: Each new area should add maximum new coverage
192
+ - Efficiency: Minimize cost while meeting targets
193
+ - Connectivity: Corridors link protected areas
194
+ ```
195
+
196
+ ## Reporting Conservation Research
197
+
198
+ Report species names with taxonomic authority and reference to the taxonomic standard used (e.g., ITIS, Catalogue of Life). Deposit occurrence data in GBIF. Follow the Darwin Core standard for biodiversity data. Use IUCN criteria language when discussing threat status. Clearly state conservation implications and management recommendations, as conservation biology is an applied and mission-driven discipline.
@@ -0,0 +1,158 @@
1
+ ---
2
+ name: gbif-api
3
+ description: "Global biodiversity data API for species occurrences and datasets"
4
+ metadata:
5
+ openclaw:
6
+ emoji: "🔍"
7
+ category: "domains"
8
+ subcategory: "ecology"
9
+ keywords: ["ecology", "biodiversity", "taxonomy", "environmental science"]
10
+ source: "https://www.gbif.org/developer/summary"
11
+ ---
12
+
13
+ # GBIF API Guide
14
+
15
+ ## Overview
16
+
17
+ The Global Biodiversity Information Facility (GBIF) is an international network and data infrastructure funded by governments worldwide, aimed at providing open access to biodiversity data. GBIF aggregates hundreds of millions of species occurrence records from natural history collections, citizen science platforms, monitoring networks, and published literature across the globe.
18
+
19
+ The GBIF API provides programmatic access to this vast repository of biodiversity data. Researchers can search for species occurrences by taxonomy, geography, time period, and dataset. The API also supports taxonomic name matching, dataset discovery, and species profile lookups. It serves as a foundational resource for ecological research, conservation planning, biogeography, and environmental impact assessments.
20
+
21
+ Ecologists, conservation biologists, biogeographers, and environmental scientists rely on the GBIF API to retrieve georeferenced occurrence data for species distribution modeling, climate change impact analysis, invasive species tracking, and biodiversity hotspot identification. The data is freely available under open data licenses.
22
+
23
+ ## Authentication
24
+
25
+ No authentication required for read access. The GBIF API is publicly accessible without any API key or token. All search and retrieval endpoints are open. User authentication is only required for data publishing operations (creating datasets and uploading occurrences), which requires a GBIF account.
26
+
27
+ ## Core Endpoints
28
+
29
+ ### occurrence/search: Search Species Occurrences
30
+
31
+ Search for georeferenced biodiversity observation and specimen records across all GBIF-indexed datasets.
32
+
33
+ - **URL**: `GET https://api.gbif.org/v1/occurrence/search`
34
+ - **Parameters**:
35
+
36
+ | Parameter | Type | Required | Description |
37
+ |-----------------|--------|----------|------------------------------------------------------|
38
+ | q | string | No | Full-text search query |
39
+ | taxonKey | int | No | GBIF backbone taxonomy key |
40
+ | scientificName | string | No | Scientific name to filter by |
41
+ | country | string | No | ISO 3166-1 alpha-2 country code |
42
+ | hasCoordinate | bool | No | Filter for georeferenced records only |
43
+ | year | string | No | Year or range (e.g., `2020,2024`) |
44
+ | limit | int | No | Number of results (default 20, max 300) |
45
+ | offset | int | No | Pagination offset |
46
+
47
+ - **Example**:
48
+
49
+ ```bash
50
+ curl "https://api.gbif.org/v1/occurrence/search?scientificName=Panthera+tigris&hasCoordinate=true&limit=10"
51
+ ```
52
+
53
+ - **Response**: Returns `count` (total matches), `results` array with `key`, `scientificName`, `decimalLatitude`, `decimalLongitude`, `country`, `basisOfRecord`, `eventDate`, `datasetKey`, `publishingOrgKey`, and `media` links.
54
+
55
+ ### species/match: Taxonomic Name Matching
56
+
57
+ Match a species name against the GBIF backbone taxonomy to resolve canonical names and get taxonomy keys.
58
+
59
+ - **URL**: `GET https://api.gbif.org/v1/species/match`
60
+ - **Parameters**:
61
+
62
+ | Parameter | Type | Required | Description |
63
+ |-----------|--------|----------|------------------------------------------|
64
+ | name | string | Yes | Scientific name to match |
65
+ | kingdom | string | No | Kingdom filter for disambiguation |
66
+ | strict | bool | No | If true, only return exact matches |
67
+
68
+ - **Example**:
69
+
70
+ ```bash
71
+ curl "https://api.gbif.org/v1/species/match?name=Homo+sapiens"
72
+ ```
73
+
74
+ - **Response**: Returns `usageKey`, `scientificName`, `canonicalName`, `rank`, `status`, `kingdom`, `phylum`, `class`, `order`, `family`, `genus`, `species`, `confidence` score, and `matchType`.
75
+
76
+ ### dataset: Discover Datasets
77
+
78
+ Search for and retrieve metadata about GBIF-indexed datasets from publishers worldwide.
79
+
80
+ - **URL**: `GET https://api.gbif.org/v1/dataset`
81
+ - **Parameters**:
82
+
83
+ | Parameter | Type | Required | Description |
84
+ |-----------------|--------|----------|-------------------------------------------------|
85
+ | q | string | No | Full-text search query |
86
+ | type | string | No | Dataset type: `OCCURRENCE`, `CHECKLIST`, etc. |
87
+ | publishingOrg | string | No | Publishing organization UUID |
88
+ | limit | int | No | Number of results (default 20, max 1000) |
89
+ | offset | int | No | Pagination offset |
90
+
91
+ - **Example**:
92
+
93
+ ```bash
94
+ curl "https://api.gbif.org/v1/dataset?q=bird+monitoring&type=OCCURRENCE&limit=5"
95
+ ```
96
+
97
+ - **Response**: Returns `count`, `results` array with `key`, `title`, `description`, `type`, `publishingOrganizationKey`, `license`, `recordCount`, and `endpoints`.
98
+
99
+ ## Rate Limits
100
+
101
+ No formal rate limits are enforced on the GBIF API. However, GBIF recommends responsible use patterns. Large data downloads (millions of records) should use the asynchronous download API at `https://api.gbif.org/v1/occurrence/download/request` rather than paginating through the search endpoint. The search endpoint is limited to 100,000 records maximum per query via pagination.
102
+
103
+ ## Common Patterns
104
+
105
+ ### Species Distribution Mapping
106
+
107
+ Retrieve georeferenced occurrence data for species distribution modeling:
108
+
109
+ ```python
110
+ import requests
111
+
112
+ params = {
113
+ "taxonKey": 2480498, # Panthera tigris
114
+ "hasCoordinate": True,
115
+ "limit": 300
116
+ }
117
+ resp = requests.get("https://api.gbif.org/v1/occurrence/search", params=params)
118
+ data = resp.json()
119
+
120
+ coordinates = [(r["decimalLongitude"], r["decimalLatitude"])
121
+ for r in data["results"]
122
+ if "decimalLongitude" in r and "decimalLatitude" in r]
123
+
124
+ print(f"Retrieved {len(coordinates)} georeferenced occurrences of {data['results'][0]['scientificName']}")
125
+ ```
126
+
127
+ ### Taxonomic Name Resolution Pipeline
128
+
129
+ Resolve a list of species names against the GBIF backbone taxonomy:
130
+
131
+ ```python
132
+ import requests
133
+
134
+ names = ["Homo sapiens", "Canis lupus", "Quercus robur", "Drosophila melanogaster"]
135
+
136
+ for name in names:
137
+ resp = requests.get("https://api.gbif.org/v1/species/match", params={"name": name})
138
+ match = resp.json()
139
+ print(f"{name} -> {match['canonicalName']} (key: {match['usageKey']}, confidence: {match['confidence']})")
140
+ ```
141
+
142
+ ### Bulk Occurrence Download
143
+
144
+ For large-scale analyses requiring millions of records, use the asynchronous download API:
145
+
146
+ ```bash
147
+ curl -X POST "https://api.gbif.org/v1/occurrence/download/request" \
148
+ -H "Content-Type: application/json" \
149
+ -u username:password \
150
+ -d '{"creator":"username","predicate":{"type":"equals","key":"TAXON_KEY","value":"2480498"}}'
151
+ ```
152
+
153
+ ## References
154
+
155
+ - Official API documentation: https://www.gbif.org/developer/summary
156
+ - GBIF occurrence search API: https://www.gbif.org/developer/occurrence
157
+ - GBIF species API: https://www.gbif.org/developer/species
158
+ - GBIF data use guide: https://www.gbif.org/data-use