下载mapbox离线字体库Python脚本

1.使用的字体库为超图的字体库
2.在线字体库地址为:https://iserver.supermap.io/iserver/services/map-beijing/rest/maps/beijingMap/tileFeature/sdffonts/{fontstack}/{range}.pbf
3.在使用mapbox-gl直接创建地图时,glyphs属性设置为在线地址,可以查看到具体的访问pbf二进制文件的地址,例如
https://iserver.supermap.io/iserver/services/map-beijing/rest/maps/beijingMap/tileFeature/sdffonts/Open%20Sans%20Regular,Arial%20Unicode%20MS%20Regular/0-255.pbf
4.创建文件夹“Open Sans Regular,Arial Unicode MS Regular”,将下载下来的pbf文件放到该文件夹下,然后将mapbox-gl的glyphs属性设置为自定义路径,例如:‘…/…/glyphs/{fontstack}/{range}.pbf’,将“Open Sans Regular,Arial Unicode MS Regular”文件夹放到“glyphs”文件夹下,{fontstack}和{range}为固定格式不需要改。

import requests
import os

base_url = 'https://iserver.supermap.io/iserver/services/map-beijing/rest/maps/beijingMap/tileFeature/sdffonts/Open%20Sans%20Regular,Arial%20Unicode%20MS%20Regular/'
filename_template = '{}-{}.pbf'
download_dir = 'G:/GIS/glyphs/'

for start in range(0, 65536, 256):
    end = start + 255
    url = base_url + filename_template.format(start, end)
    filename = filename_template.format(start, end)

    response = requests.get(url)

    if response.status_code == 200:
        filepath = os.path.join(download_dir, filename)
        with open(filepath, 'wb') as f:
            f.write(response.content)
            print(f"Downloaded {filename} ({len(response.content)} bytes)")
    else:
        print(
            f"Failed to download {filename} ({response.status_code} {response.reason})")

### Mapbox 离线地图实现方法 #### 安装依赖库 为了实现在Mapbox中使用离线地图的功能,开发者需要安装`mapbox-gl`以及`@mapbox/mapbox-gl-offline`插件。这两个包可以通过npm进行安装。 ```bash npm install mapbox-gl @mapbox/mapbox-gl-offline ``` #### 初始化Mapbox实例并配置离线缓存策略 初始化一个新的MapboxGL对象,并设置其属性以便支持离线模式。这里需要注意的是,在创建地图之前应该先定义好要下载的地图区域范围和缩放级别[^2]。 ```javascript import mapboxgl from 'mapbox-gl'; import OfflinePlugin from '@mapbox/mapbox-gl-offline'; // 设置访问令牌 mapboxgl.accessToken = 'YOUR_MAPBOX_ACCESS_TOKEN'; const map = new mapboxgl.Map({ container: 'map', // 地图容器ID style: 'mapbox://styles/mapbox/streets-v11', center: [-74.5, 40], // 初始中心点坐标 zoom: 9 // 初始缩放比例 }); // 启用离线插件 map.addControl(new OfflinePlugin()); ``` #### 下载指定地区的地图数据到本地存储 利用`OfflineManager`类可以方便地管理离线资源的获取过程。下面这段代码展示了如何规划一个矩形边界框内的所有切片图像并将它们保存下来供后续脱机查看。 ```javascript const offlineManager = new mapboxgl.offline.Manager(map); offlineManager.downloadRegion( { bounds: [ -80.03656, 35.04524, -75.74622, 36.58743 ], minZoom: 0, maxZoom: 14 }, (err) => { if (!err) console.log('Download complete!'); } ); ``` #### 加载已存在的离线地图文件 当应用程序重新启动时,如果检测到了有效的离线数据库,则可以直接加载这些预先下载好的地理信息而无需再次联网请求新资料。 ```javascript if ('indexedDB' in window && navigator.onLine === false){ const dbPromise = indexedDB.open("mapbox", 1); dbPromise.onsuccess = function(event){ let db=event.target.result; // 查询是否有可用的数据记录... // 如果有则调用addSource/addLayer等API恢复显示状态 db.close(); }; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值