UNPKG

@trailstash/ultra

Version:

A web based tool for making MapLibre GL maps with data from sources such as Overpass, GeoJSON, GPX, KML, TCX, etc

63 lines (59 loc) 1.87 kB
import { setQueryBounds } from "../bounds.js"; import { layers, popupTemplate } from "./osm.js"; const popupContextBuilder = ({ properties, geometry }) => { const templateContext = { id: properties["@osmId"].split("/")[1], type: properties["@osmType"], meta: { changeset: properties["@changesetId"], version: properties["@version"], lastEdit: properties["@lastEdit"], snapshotTimestamp: properties["@snapshotTimestamp"], }, tags: { ...properties }, }; delete templateContext.tags["@osmId"]; delete templateContext.tags["@osmType"]; delete templateContext.tags["@changesetId"]; delete templateContext.tags["@version"]; delete templateContext.tags["@lastEdit"]; delete templateContext.tags["@snapshotTimestamp"]; if (properties["@type"] === "node") { templateContext.coordinates = geometry.coordinates; } return templateContext; }; const ohsome = { source: async function (query, controller, { server, bounds }) { if (!server) { server = "https://api.ohsome.org/v1"; } const body = new FormData(); body.append( "bboxes", `${bounds.getWest()},${bounds.getSouth()},${bounds.getEast()},${bounds.getNorth()}`, ); body.append("filter", query); body.append("properties", "tags,metadata"); const resp = await fetch(`${server}/elements/geometry`, { method: "POST", body, }); if (!resp.ok) { throw new Error(`Ohsome API returned ${resp.status}`); } const data = await resp.json(); return { type: "geojson", data, attribution: '\u003Ca href="https://www.openstreetmap.org/copyright" target="_blank"\u003E© OpenStreetMap contributors\u003C/a\u003E', generateId: true, }; }, layers, popupTemplate, popupContextBuilder, invalidateCacheOnBBox: true, }; export default ohsome;