網站搜尋

typescript - 在 deno 中使用 mapbox-gl


我正在嘗試在 Deno 中使用 Mapbox

其實我正在嘗試這個:

import mapboxgl from 'https://dev.jspm.io/mapbox-gl';

mapboxgl.accessToken =  "toto";

var map = new mapboxgl.Map({
  container: 'map', // container id
  style: 'mapbox://styles/mapbox/streets-v11', // style URL
  center: [-74.5, 40], // starting position [lng, lat]
  zoom: 9 // starting zoom
  });

基於:如何在 DENO 中使用 npm 模組?

使用 jspm 時,當我嘗試時有太多錯誤,我有一個:

esModuleInterop, module, target
error: TS2339 [ERROR]: Property 'accessToken' does not exist on type '{}'.
mapboxgl.accessToken =  "toto";
         ~~~~~~~~~~~
    at file:///home/bussiere/Workspace/GreatParis/templateV2/source/deno/Mapbox/map.ts:10:10

TS2339 [ERROR]: Property 'Map' does not exist on type '{}'.
var map = new mapboxgl.Map({
                       ~~~
    at file:///home/bussiere/Workspace/GreatParis/templateV2/source/deno/Mapbox/map.ts:12:24

我也試過:

import {  mapboxgl } from "./../../libs/mapbox/2_1_1/mapbox-gl.js";

mapboxgl.accessToken =  "toto";

var map = new mapboxgl.Map({
  container: 'map', // container id
  style: 'mapbox://styles/mapbox/streets-v11', // style URL
  center: [-74.5, 40], // starting position [lng, lat]
  zoom: 9 // starting zoom
  });

但是我有一個:

Unsupported compiler options in "templateV2/source/deno/Mapbox/tsconfig.json".
  The following options were ignored:
    esModuleInterop, module, target
Bundle file:///home/bussiere/Workspace/GreatParis/templateV2/source/deno/Mapbox/map.ts
Emit "../compiled/map.js" (1.45MB)
error: Uncaught (in promise) RuntimeError: unreachable
    at <anonymous> (wasm://wasm/00247702:1:336403)
    at <anonymous> (wasm://wasm/00247702:1:341096)
    at <anonymous> (wasm://wasm/00247702:1:339419)
    at <anonymous> (wasm://wasm/00247702:1:339781)
    at <anonymous> (wasm://wasm/00247702:1:336272)
    at <anonymous> (wasm://wasm/00247702:1:268321)
    at minify (wasm://wasm/00247702:1:253183)
    at minify (https://deno.land/x/[email /wasm.js:98:14)
    at minify (https://deno.land/x/[email /mod.ts:27:10)
    at https://deno.land/x/[email /cli.ts:53:3

這是我的 tsconfig.json :

{
  "compilerOptions": {
    /* Basic Options */
    "target": "es5",                          /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */
    "module": "commonjs",                     /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
    "lib": ["dom","es2015","DOM"],                    /* Specify library files to be included in the compilation. */
    
    /* Strict Type-Checking Options */
    "strict": true,                           /* Enable all strict type-checking options. */
    "strictNullChecks": false,              /* Enable strict null checks. */
    "esModuleInterop": true                   /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
 
  }
}

有人成功在 Deno 上使用 mapbox-gl 嗎?

此致

答案#1

在其 package.json 中,mapbox-gl-js 將自身描述為「一個 WebGL 互動地圖庫」。它預期在瀏覽器中運行,並可以訪問 DOM 和 WebGL(一種高效渲染圖形的技術)。

我能想到想用 Deno 來運行它的原因有兩個:

  1. 在已經使用 Deno 的 Web 應用程式中加入地圖視覺化。在這種情況下,很簡單。你不希望 Deno 運行 mapbox-gl。你真正想要的是 Deno 提供包含一些靜態 JavaScript 的網頁,這些 JavaScript 將在瀏覽器(而不是伺服器)上執行並運行 mapbox-gl。要達到這個目的,請將 Deno 配置為提供本範例中的 HTML:https://docs.mapbox.com/mapbox-gl-js/example/simple-map/

  2. 以程式方式生成地圖的光柵圖像(PNG 等)。例如,你可能想要根據城市的緯度和經度自動保存地圖,並包含 mapbox-gl 提供的所有樣式和選項。這通常被稱為「靜態地圖 API」。你不一定需要自己運行,這裡是 Mapbox 的此 API 文檔(每月 50,000 次免費)。如果你真的想自己運行,請參見下文。

在伺服器上運行 mapbox-gl

在沒有瀏覽器的情況下使用 mapbox-gl-js,你需要模擬 DOM 和 WebGL。但實際上有一個更簡單的方式來生成靜態地圖:mapbox-gl-native。它需要的渲染庫在伺服器上提供起來更簡單(並且性能可能更好?)。

一個實現這一點的專案是 tileserver-gl。它的源代碼相當小,你可以從中獲得指導。使用 mapbox-gl-native 的部分問題將是安裝和配置其依賴項。可以從 tileserver-gl 的依賴項中了解這些資訊。

你可以在 Deno 中重現 tileserver-gl,甚至可以重用它的一些源文件,如果授權允許的話。但你可能不需要這麼做!視你想要達成的目標而定,你也可以直接使用 Docker 啟動 tileserver-gl,並使用 Deno 從它的 API 端點請求靜態地圖影像。