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

64 lines (60 loc) 1.8 kB
import { layers } from "./osm.js"; export const popupTemplate = ` {%- if osm_type and osm_id %} {%- if osm_type == "N" %}{% assign type = "node" %} {%- elsif osm_type == "W" %}{% assign type = "way" %} {%- elsif osm_type == "R" %}{% assign type = "relation" %} {%- else %}{% assign type = osm_type %} {%- endif %} <h2> {{ osm_type }} <a href="https://openstreetmap.org/{{ type }}/{{ osm_id }}" target="_blank">{{ osm_id }}</a> <a href="https://openstreetmap.org/edit?{{ type }}={{ osm_id }}" target="_blank">✏️</a> </h2> {%- endif %} {%- for prop in properties %} <code>{{ prop[0] }} = {{ prop[1] | json }}</code> <br> {%- endfor %} `; export const popupContextBuilder = ({ properties }) => { const { osm_id, osm_type, ...rest } = properties; return { osm_id, osm_type, properties: Object.entries(rest), }; }; const postpass = { source: async function (query, controller, { server }) { if (!server) { server = "https://postpass.geofabrik.de/api/0.2/interpreter"; } const resp = await fetch(server, { method: "POST", body: new URLSearchParams([["data", query]]), signal: controller.signal, headers: { "Content-Type": "application/x-www-form-urlencoded", Accept: "application/json", }, }); if (!resp.ok) { throw new Error( `Postpass API returned ${resp.status}:\n${await resp.text()}`, ); } 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, }; export default postpass;