Geo pandas датафрейм в Geo JSON в индекс Elasticsearch? - PullRequest
1 голос
/ 29 апреля 2020

У меня вопрос, связанный с этим вопросом : я относительно новичок в python и теперь начал визуализировать в Кибане, в котором я новичок (как в Я никогда не использовал это раньше). Теперь у меня есть pandas геосерий датафреймов, подобных этому:

    ID      Geometry
0   9417    POLYGON ((229611.185 536552.731, 229611.100 53...
1   3606    POLYGON ((131122.280 460609.117, 131108.312 46...
2   1822    POLYGON ((113160.653 517762.384, 113169.755 51...
3   7325    POLYGON ((196861.725 470370.632, 196869.990 47...
4   9258    POLYGON ((201372.387 579807.340, 201373.195 57...

И я хотел бы создать карту с этими полигонами в кибане, но я действительно не знаю, как. Я читал разные части поasticsearch и stackoverflow, но я не могу собрать нужные части вместе. Дело в том, что в нашем проекте мы хотим импортировать данные в python, немного предварительно обработать их и экспортировать в kibana. Таким образом, существует процесс Python - Geo JSON - Elasticsearch [7.6] , и вся литература, которую я нашел, не включает все эти 3 актива, поэтому я не уверен, как действовать.

Я также пытался сохранить файл как Geo JSON, а затем импортировать его через панель управления Kibana, в визуализации карты, например , эта инструкция говорит. Когда я импортирую данные, он не даст моему файлу индекс, и поэтому он не будет визуализировать какие-либо мои данные.

Я читал о том, как вы не можете индексировать целый многоугольник, но я должен разделить это в координатах. Моя проблема в том, что я не могу найти хороший способ сделать это в python. Также я прочитал, что индекс в Elasticsearch должен иметь правильное отображение для геоиндексации. Но опять же, я застрял в создании этого гео-картографирования из python.

Может ли кто-нибудь мне помочь:)?

1 Ответ

0 голосов
/ 29 апреля 2020

Это должно помочь вам начать:

  1. Импорт и инициализация
import shapely.geometry
import geopandas
from elasticsearch import Elasticsearch
import json

es = Elasticsearch(['http://localhost:9200'])
geoindex = None
Получить или создать индекс (+ отображение, если необходимо)
try:
    geoindex = es.indices.get('geoindex')
except Exception:
    geoindex = es.indices.create('geoindex', {
        "mappings": {
            "properties": {
                "polygon": {
                    "type": "geo_shape",
                    "strategy": "recursive"
                }
            }
        }
    })

Дамп как json и загрузка обратно в диктовку (вдохновленный this ; я подозреваю, что должен быть более чистый путь)
shapely_polygon = shapely.geometry.Polygon([(0, 0), (0, 1), (1, 0)])
geojson_str = geopandas.GeoSeries([shapely_polygon]).to_json()
Итерация и синхронизация c в ES
for feature in json.loads(geojson_str)['features']:
    es.index('geoindex', { "polygon": {
        "type": "polygon",
        "coordinates": feature['geometry']['coordinates']
    }}, id=feature['id'])
Проверка
count = es.count({}, 'geoindex')
print(count)
Визуализация
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...