Skip to content

Commit a97589c

Browse files
committed
feat(plugins): add an Earthdata GIS browser under Web Services
NASA publishes its EOSDIS imagery, map, and feature services through an ArcGIS Enterprise portal that GeoLibre could not reach without pasting service URLs by hand. This adds a searchable panel over that catalog and renders each item as a first-class layer.
1 parent 4d034d5 commit a97589c

8 files changed

Lines changed: 1724 additions & 0 deletions

File tree

apps/geolibre-desktop/src/components/layout/TopToolbar.tsx

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import {
2323
setBasemapControlLabels,
2424
setGraticuleLabels,
2525
setMapillaryLabels,
26+
setEarthdataGisLabels,
2627
setOpenAerialMapLabels,
2728
setHuggingFaceLabels,
2829
setSourceCoopLabels,
@@ -274,6 +275,53 @@ export function TopToolbar({
274275
metaSource: t("openAerialMap.metaSource"),
275276
metaRaw: t("openAerialMap.metaRaw"),
276277
});
278+
setEarthdataGisLabels({
279+
hint: t("earthdataGis.hint"),
280+
searchPlaceholder: t("earthdataGis.searchPlaceholder"),
281+
search: t("earthdataGis.search"),
282+
searching: t("earthdataGis.searching"),
283+
loadingMore: t("earthdataGis.loadingMore"),
284+
loadMore: t("earthdataGis.loadMore"),
285+
noResults: t("earthdataGis.noResults"),
286+
showing: (shown, total) => t("earthdataGis.showing", { shown, total }),
287+
searchError: (message) => t("earthdataGis.searchError", { message }),
288+
limitToView: t("earthdataGis.limitToView"),
289+
limitToViewTitle: t("earthdataGis.limitToViewTitle"),
290+
filterAll: t("earthdataGis.filterAll"),
291+
filterImage: t("earthdataGis.filterImage"),
292+
filterMap: t("earthdataGis.filterMap"),
293+
filterFeature: t("earthdataGis.filterFeature"),
294+
kindImage: t("earthdataGis.kindImage"),
295+
kindMap: t("earthdataGis.kindMap"),
296+
kindFeature: t("earthdataGis.kindFeature"),
297+
add: t("earthdataGis.add"),
298+
adding: t("earthdataGis.adding"),
299+
remove: t("earthdataGis.remove"),
300+
zoom: t("earthdataGis.zoom"),
301+
details: t("earthdataGis.details"),
302+
addTitle: t("earthdataGis.addTitle"),
303+
removeTitle: t("earthdataGis.removeTitle"),
304+
zoomTitle: t("earthdataGis.zoomTitle"),
305+
zoomUnavailableTitle: t("earthdataGis.zoomUnavailableTitle"),
306+
detailsTitle: t("earthdataGis.detailsTitle"),
307+
addError: (message) => t("earthdataGis.addError", { message }),
308+
addTimeout: t("earthdataGis.addTimeout"),
309+
detailsHeading: t("earthdataGis.detailsHeading"),
310+
close: t("earthdataGis.close"),
311+
metaTitle: t("earthdataGis.metaTitle"),
312+
metaType: t("earthdataGis.metaType"),
313+
metaSummary: t("earthdataGis.metaSummary"),
314+
metaDescription: t("earthdataGis.metaDescription"),
315+
metaOwner: t("earthdataGis.metaOwner"),
316+
metaModified: t("earthdataGis.metaModified"),
317+
metaTags: t("earthdataGis.metaTags"),
318+
metaExtent: t("earthdataGis.metaExtent"),
319+
metaCredits: t("earthdataGis.metaCredits"),
320+
metaLicense: t("earthdataGis.metaLicense"),
321+
metaService: t("earthdataGis.metaService"),
322+
metaPortalItem: t("earthdataGis.metaPortalItem"),
323+
metaRaw: t("earthdataGis.metaRaw"),
324+
});
277325
setSourceCoopLabels({
278326
hint: t("sourceCoop.hint"),
279327
searchPlaceholder: t("sourceCoop.searchPlaceholder"),

apps/geolibre-desktop/src/hooks/usePlugins.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import {
2222
getEffectsSettings,
2323
setEffectsSettings,
2424
type EffectsSettings,
25+
maplibreEarthdataGisPlugin,
2526
maplibreEnviroAtlasPlugin,
2627
maplibreEsriWaybackPlugin,
2728
maplibreFemaWmsPlugin,
@@ -158,6 +159,7 @@ manager.registerAll([
158159
maplibreNasaEarthdataPlugin,
159160
maplibreEnviroAtlasPlugin,
160161
maplibreNationalMapPlugin,
162+
maplibreEarthdataGisPlugin,
161163
maplibreOpenAerialMapPlugin,
162164
maplibreSourceCoopPlugin,
163165
maplibreNaturalEarthPlugin,

apps/geolibre-desktop/src/i18n/locales/en.json

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2700,6 +2700,53 @@
27002700
"metaSource": "Source GeoTIFF",
27012701
"metaRaw": "Raw metadata"
27022702
},
2703+
"earthdataGis": {
2704+
"hint": "Search NASA Earthdata GIS for imagery, map, and feature services.",
2705+
"searchPlaceholder": "Search Earthdata GIS…",
2706+
"search": "Search",
2707+
"searching": "Searching…",
2708+
"loadingMore": "Loading more…",
2709+
"loadMore": "Load more",
2710+
"noResults": "No services matched this search.",
2711+
"showing": "Showing {{shown}} of {{total}} services.",
2712+
"searchError": "Could not reach Earthdata GIS: {{message}}. Please try again.",
2713+
"limitToView": "Limit to map view",
2714+
"limitToViewTitle": "Only return services that intersect the current map view",
2715+
"filterAll": "All",
2716+
"filterImage": "Imagery",
2717+
"filterMap": "Maps",
2718+
"filterFeature": "Features",
2719+
"kindImage": "Image service",
2720+
"kindMap": "Map service",
2721+
"kindFeature": "Feature service",
2722+
"add": "Add",
2723+
"adding": "Adding…",
2724+
"remove": "Remove",
2725+
"zoom": "Zoom",
2726+
"details": "Details",
2727+
"addTitle": "Add this service to the map",
2728+
"removeTitle": "Remove this service from the map",
2729+
"zoomTitle": "Zoom to this service",
2730+
"zoomUnavailableTitle": "This service does not publish an extent",
2731+
"detailsTitle": "View this service's metadata",
2732+
"addError": "Could not add the service: {{message}}",
2733+
"addTimeout": "it did not respond within a minute. The layer will still appear if it finishes.",
2734+
"detailsHeading": "Service details",
2735+
"close": "Close",
2736+
"metaTitle": "Title",
2737+
"metaType": "Type",
2738+
"metaSummary": "Summary",
2739+
"metaDescription": "Description",
2740+
"metaOwner": "Published by",
2741+
"metaModified": "Last modified",
2742+
"metaTags": "Tags",
2743+
"metaExtent": "Extent (W, S, E, N)",
2744+
"metaCredits": "Credits",
2745+
"metaLicense": "Use constraints",
2746+
"metaService": "Service URL",
2747+
"metaPortalItem": "Portal item",
2748+
"metaRaw": "Raw metadata"
2749+
},
27032750
"sourceCoop": {
27042751
"hint": "Search Source Cooperative for open geospatial data, or enter an account/product id.",
27052752
"searchPlaceholder": "Search data, or account/product",

packages/plugins/src/index.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,22 @@ export {
339339
export { maplibreGeoAgentPlugin } from "./plugins/maplibre-geoagent";
340340
export { maplibreUsgsLidarPlugin } from "./plugins/maplibre-usgs-lidar";
341341
export { maplibreNasaEarthdataPlugin } from "./plugins/maplibre-nasa-earthdata";
342+
export {
343+
DEFAULT_EARTHDATA_GIS_LABELS,
344+
EARTHDATA_GIS_PLUGIN_ID,
345+
maplibreEarthdataGisPlugin,
346+
setEarthdataGisLabels,
347+
type EarthdataGisLabels,
348+
} from "./plugins/maplibre-earthdata-gis";
349+
// The catalog client's helpers (buildSearchUrl, parseSearchResponse, …) are
350+
// deliberately not re-exported here: those names are already taken by the
351+
// OpenAerialMap client below. Import them from the module path instead.
352+
export {
353+
EARTHDATA_GIS_PORTAL_URL,
354+
type EarthdataGisItem,
355+
type EarthdataGisSearchResult,
356+
type EarthdataServiceKind,
357+
} from "./plugins/earthdata-gis-api";
342358
export {
343359
DEFAULT_OPENAERIALMAP_LABELS,
344360
maplibreOpenAerialMapPlugin,

0 commit comments

Comments
 (0)