UNPKG

@azure-rest/maps-render

Version:
93 lines 3.1 kB
// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. import { createMultiCollection } from "./createMultiCollection.js"; const optionKeyMap = { opacity: "al", labelAnchor: "la", labelColor: "lc", labelSizeInPixels: "ls", pinAnchor: "an", rotationInDegree: "ro", scale: "sc", pinColor: "co", }; function isOptionKeyMap(key) { return key in optionKeyMap; } /** * Create a pin query string for _get map static image_ * * @example * ```ts snippet:ReadmeSampleCreatePinsQuery * import { DefaultAzureCredential } from "@azure/identity"; * import MapsRender, { PinSet, createPinsQuery } from "@azure-rest/maps-render"; * import { createWriteStream } from "node:fs"; * * const credential = new DefaultAzureCredential(); * const client = MapsRender(credential, "<maps-account-client-id>"); * * const pins: PinSet[] = [ * { * pins: [ * { coordinate: [52.577, 13.35], label: "Label start" }, * { coordinate: [52.6, 13.2988], label: "Label end" }, * ], * pinImage: "default", * options: { * scale: 0.9, * pinColor: "FF0000", * labelColor: "0000FF", * labelSizeInPixels: 18, * }, * }, * ]; * * const path = createPinsQuery(pins); * * const response = await client * .path("/map/static") * .get({ * queryParameters: { * bbox: [13.228, 52.4559, 13.5794, 52.62], * zoom: 10, * path, * }, * skipUrlEncoding: true, * }) * .asNodeStream(); * * // Handle the error. * if (!response.body) { * throw Error("No response body"); * } * * response.body.pipe(createWriteStream("pin.png")); * ``` * * @param pins - An array of {@link Pin} that specify the positions and label text of each pin. * @param pinImage - Specify the image source for custom pin. Set this to "none" if you don't want to show a pin image. * @param options - The style options of the pins. See {@link PinOptions} * @returns - The composed query string. */ export function createPinsQuery(pinSets) { const pinsQueries = pinSets.map(({ pins, pinImage = "default", options = {} }) => { // compose the pins' position query string const pinsQueryStr = pins .map(({ coordinate: [lat, lon], label }) => `${label ? `'${label}'` : ""}${lon} ${lat}`) .join("|"); // compose the options query string const optionsQueryStr = Object.entries(options).reduce((queryStr, [key, val]) => { if (!isOptionKeyMap(key)) throw Error(`Unexpected option: ${key}`); if (Array.isArray(val)) return (queryStr += `|${optionKeyMap[key]}${val[0]} ${val[1]}`); return (queryStr += `|${optionKeyMap[key]}${val}`); }, ""); if (pinImage === "none" || pinImage === "default") { return `${pinImage}${optionsQueryStr}||${pinsQueryStr}`; } return `custom${optionsQueryStr}||${pinsQueryStr}||${pinImage}`; }); return createMultiCollection("pins", pinsQueries); } //# sourceMappingURL=createPinsQuery.js.map