Как мне добавить geo json в URL для stati c image api? - PullRequest
1 голос
/ 10 июля 2020

У меня есть гео json (весь этот код находится в python)

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties":  {
        "stroke": "#000000",
        "fill": "#005776",
        "fill-opacity": 1.0
      },
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [-81.26581704096897, 28.37974376331988],
            [-81.26601725837781, 28.37977498699149],
            [-81.26613780689904, 28.37940694447166],
            [-81.26594365491499, 28.3793572200485],
            [-81.26581704096897, 28.37974376331988]
          ]
        ]
      }
    }
  ]
}

Я кодирую его так:

geojson_string = json.dumps(geojson, separators=(',', ':'))
geojson_encoded = urllib.parse.quote(f"{{{geojson_string}}}")

И получаю эту строку:

%7B%22type%22%3A%22FeatureCollection%22%2C%22features%22%3A%5B%7B%22type%22%3A%22Feature%22%2C%22properties%22%3A%7B%22stroke%22%3A%22%23000000%22%2C%22fill%22%3A%22%23005776%22%2C%22fill-opacity%22%3A1%7D%2C%22geometry%22%3A%7B%22type%22%3A%22Polygon%22%2C%22coordinates%22%3A%5B%5B%5B-81.26581704096897%2C28.37974376331988%5D%2C%5B-81.26601725837781%2C28.37977498699149%5D%2C%5B-81.26613780689904%2C28.37940694447166%5D%2C%5B-81.26594365491499%2C28.3793572200485%5D%2C%5B-81.26581704096897%2C28.37974376331988%5D%5D%5D%7D%7D%7D

Затем я делаю URL-адрес следующим образом:

url = f"https://api.mapbox.com/styles/v1/{user}/{style}/static/geojson(geojson_encoded)/auto/640x360?{access_token}"

Но я получаю эту ошибку:

message: "Failed parsing geojson"

Может ли кто-нибудь помочь мне узнать, что Я делаю не так?

1 Ответ

0 голосов
/ 13 июля 2020

Проблема возникает для l ie с тем, как ваш код Python кодирует и / или делает запрос к API, поэтому я бы рекомендовал вам дважды проверить, что выполняемый запрос соответствует вашим ожиданиям.

Если я возьму ваш незакодированный объект geo json и включу его непосредственно в запрос cURL (убедитесь, что кодируете только необходимое запрещенное использование # для цветов), то у меня не будет никаких проблемы с получением действительного ответа:

https://api.mapbox.com/styles/v1/mapbox/light-v10/static/geojson({"type":"FeatureCollection","features":[{"type":"Feature","properties":{"stroke":"%23000000","fill":"%23005776","fill-opacity":1},"geometry":{"type": "Polygon","coordinates":[[[-81.26581704096897,28.37974376331988],[-81.26601725837781,28.37977498699149],[-81.26613780689904,28.37940694447166],[-81.26594365491499,28.3793572200485],[-81.26581704096897,28.37974376331988]]]}}]})/auto/630x360?access_token=my.token

Приведенный выше запрос отвечает желаемым изображением (хотя и без пользовательского стиля):

stati c изображение карты с многоугольником в центре

⚠️ отказ от ответственности: в настоящее время я работаю в Mapbox ⚠️

...