Рендеринг шестиугольников H3 с использованием поменянного лат, long в kepler.gl - PullRequest
1 голос
/ 07 ноября 2019

Я хочу построить шестиугольники H3. Из Австрии.

Скачать и распаковать https://biogeo.ucdavis.edu/data/gadm3.6/gpkg/gadm36_AUT_gpkg.zip

Полный код доступен на https://gist.github.com/geoHeil/b5b74887e20e4b659d4bb693a700a402 генерирует для генерации шестиугольников, таких как:

size = 7
hexagons = pd.DataFrame(h3.polyfill(geoJson, size), columns=['hexagons'])
hexagons.head()

8752e5b80ffffff
8752ee6c1ffffff

Примечание h3ожидает epsg: 4326 и позже генерирует ту же проекцию снова (https://github.com/uber/h3/issues/121)

Это дает файл, похожий на: enter image description here

Теперь при переходе на https://kepler.gl/ и при загрузке данных я вижу, как происходят три странные вещи

  1. полигоны из строки WKT искажены. Это будет указывать на то, что используется неправильная проекция. Но при попытке преобразования в поддерживаемую https://github.com/keplergl/kepler.gl/blob/6b380ac6db94e10fed0a76f5e78ef7e55406df21/docs/user-guides/b-kepler-gl-workflow/a-add-data-to-the-map.md Webmercator не исправляет это

enter image description here

при ручном добавлении слоя шестиугольника он отображается в Йемене (на основе адреса H3. Это кажется странным. Может ли это быть ошибкой в ​​демоверсии kepler? enter image description here. Это кажется действительностранно, так как геометрия генерируется из шестиугольников с помощью: h3_to_geo_boundary

шестиугольные центроиды не заполнены. Теперь при преобразовании в шестиугольные центроиды с помощью h3_to_geo и добавлении данных обратно впоскольку слой ha HexBin не все шестиугольники заполнены, но это странно, поскольку изначально все шестиугольники были доступны (см. 1 и 2). enter image description here

обратите внимание, как в (3) шестиугольники шестиугольника проецируются правильно как шестиугольники и не искажаются.

Ответы [ 2 ]

1 голос
/ 07 ноября 2019

Я думаю, что здесь происходит несколько вещей:

  • Предполагается, что вы используете master ветвь h3-py, подпись polyfill - это polyfill(geo_json, res, geo_json_conformant=False). Вам нужно добавить geo_json_conformant=True к вашему вызову polyfill, иначе координаты в вашем многоугольнике будут интерпретироваться как lat,lng вместо lng,lat. Это, вероятно, источник ваших проблем.

  • Я не эксперт по Кеплеру, но я полагаю, что слой HexBin использует сгенерированную декартову гексагональную сетку с выравниванием по северу / югу, котораяВот почему они выглядят «правильно» на экране. Шестиугольники H3 имеют низкое искажение, но они имеют некоторую форму и искажение области, и они никогда не выравниваются на север / юг. Когда вы отображаете их с проекцией Меркатора, как в Кеплере, они будут иметь еще большее искажение, особенно к полюсам, в зависимости от проекции. Однако основная проблема искажения здесь, вероятно, связана с переключением lat,lng - функция h3_to_multi_polygon также требует дополнительного логического аргумента для вывода координат, совместимых с GeoJSON.

  • Я полагаю, что Kepler также поддерживает слой шестиугольника H3, поэтому один из вариантов - передать необработанные точки в Kepler и позволить Kepler выполнить агрегирование по индексам H3.

0 голосов
/ 13 ноября 2019

kepler использует рендеринг экземпляров на всех шестиугольниках, он предполагает, что все ваши шестиугольники h3 относительно близки друг к другу. Он использует ваш текущий центр карты, чтобы вычислить искажение шестиугольника и применить его ко всем шестиугольникам (рендеринг экземпляров). Не идеально, но значительно улучшает производительность. Потому что слишком дорого рассчитывать искажения для каждого шестиугольника.

...