首先,Mapbox Streets v8 瓦片集有一些管理边界,但它没有州、县或城市 ID。这意味着它只是用来画线。因此,如果要选择靠近中心坐标的城市,则需要额外的图块。Mapbox 为此提供了边界服务。或者你可以找到一些像这样的免费数据。
准备好边界数据后,您可以使用静态图像 API 中的样式参数动态设置地图样式。
如果我正确理解您的用例,您的服务(或您的本地工具)将生成包含 URL 为静态 API 的标签的电子邮件。URL 部分将根据您的请求动态更改。
这是一个例子。我创建了一个从此处下载国家边界数据的图块集(我使用了 Admin 0 - 国家/地区)。瓦片集 ID 为yochi.092qgyqv.
然后创建为美国领土着色的以下样式。
layer = {
"id":"usa",
"type":"fill",
"source": {
"type": "vector",
"url": "mapbox://yochi.092qgyqv"
},
"source-layer":"ne_10m_admin_0_countries-6nyx14",
"filter":["==",["get","ISO_A2"], "US"],
"paint": {
"fill-color":"#008800",
"fill-opacity": 0.3
}
}
然后生成网址。
https://api.mapbox.com/styles/v1/mapbox/streets-v11/static/-93.0747,39.7962,2.5/700x400?access_token=pk.eyJ1IjoieW9jaGkiLCJhIjoiY2tjZThvdWExMDV2dDJxcDgxZzBwbzlxYSJ9.M0yRA6SXDMRgXzXGuYnvsg&addlayer=%7B%22id%22%3A%20%22usa%22%2C%20%22type%22%3A%20%22fill%22%2C%20%22source%22%3A%20%7B%22type%22%3A%20%22vector%22%2C%20%22url%22%3A%20%22mapbox%3A//yochi.092qgyqv%22%7D%2C%20%22source-layer%22%3A%20%22ne_10m_admin_0_countries-6nyx14%22%2C%20%22filter%22%3A%20%5B%22%3D%3D%22%2C%20%5B%22get%22%2C%20%22ISO_A2%22%5D%2C%20%22US%22%5D%2C%20%22paint%22%3A%20%7B%22fill-color%22%3A%20%22%23008800%22%2C%20%22fill-opacity%22%3A%200.3%7D%7D
结果是这样的。

请注意,样式表达式应该是 url 编码的。我还附上了一个生成 url 的 python 脚本。
import json
import urllib.parse
ACCESS_TOKEN = 'YOUR ACCESS TOKEN HERE'
def generate(layer):
style = 'mapbox/streets-v11'
encoded = urllib.parse.quote(json.dumps(layer))
return f'curl -g "https://api.mapbox.com/styles/v1/{style}/static/-93.0747,39.7962,2.5/700x400?access_token={ACCESS_TOKEN}&addlayer={encoded}"'
if __name__ == '__main__':
layer = {
"id":"usa",
"type":"fill",
"source": {
"type": "vector",
"url": "mapbox://yochi.092qgyqv"
},
"source-layer":"ne_10m_admin_0_countries-6nyx14",
"filter":["==",["get","ISO_A2"], "US"],
"paint": {
"fill-color":"#008800",
"fill-opacity": 0.3
}
}
output = generate(layer)
print(output)
补充:
总之上面的图片可以获取<img>tag。你能在你的HTML中试试吗?我解释的是如何创建这个长 URL。
<img src="https://api.mapbox.com/styles/v1/mapbox/streets-v11/static/-93.0747,39.7962,2.5/700x400?access_token=pk.eyJ1IjoieW9jaGkiLCJhIjoiY2tjZThvdWExMDV2dDJxcDgxZzBwbzlxYSJ9.M0yRA6SXDMRgXzXGuYnvsg&addlayer=%7B%22id%22%3A%20%22usa%22%2C%20%22type%22%3A%20%22fill%22%2C%20%22 source%22%3A%20%7B%22type%22%3A%20%22vector%22%2C%20%22url%22%3A%20%22mapbox%3A//yochi.092qgyqv%22%7D%2C%20%22source-layer%22%3A%20%22ne_10m_admin_0_countries-6nyx14%22%2C%20%22filter%22%3A%20%5B%22%3D%3D%22%2C%20%5B%22get%22%2C%20%22ISO_A2%22%5D%2C%20%22US%22%5D%2C%20%22paint%22%3A%20%7B%22fill-color%22%3A%20%22%23008800%22%2C%20%22fill-opacity%22%3A%200.3%7D%7D"></img>