Преобразование полигонов GeoDataFrame в файл kml

У меня есть геопандас GeoDataFrame с различными полигонами и цветами, которые я использую для построения метеорологических данных (еще один вопрос, который я задал здесь):

        color   geometry
0   #fbfdd1 (POLYGON ((-97.12191717810094 32.569, -97.1194...
1   #f3fabf (POLYGON ((-97.12442748846019 32.569, -97.1219...
2   #ebf7b1 (POLYGON ((-97.12944810917861 32.569, -97.1269...
3   #daf0b2 (POLYGON ((-97.18969555780023 32.569, -97.1879...
4   #cbeab3 (POLYGON ((-97.18969555780023 32.5710632999095...
5   #afdfb6 (POLYGON ((-97.18467493708175 32.569, -97.1821...
6   #92d4b9 (POLYGON ((-97.17463369564484 32.5730575804109...
7   #74c9bc (POLYGON ((-97.17714400600408 32.5764063816167...
8   #5bbfc0 (POLYGON ((-97.17714400600408 32.5790959050363...
9   #40b5c3 (POLYGON ((-97.17463369564484 32.5814268890055...
10  #31a6c2 (POLYGON ((-97.17714400600408 32.5852716913413...
11  #2397c0 (POLYGON ((-97.17714400600408 32.5878055733984...
12  #1e83b9 (POLYGON ((-97.17714400600408 32.5895482376014...
13  #206eaf (POLYGON ((-97.17714400600408 32.5911487379959...
14  #2259a5 (POLYGON ((-97.17714400600408 32.5927834911588...
15  #23479d POLYGON ((-97.17463369564484 32.59421434681196...
16  #243594 POLYGON ((-97.17463369564484 32.5962866795434,...
17  #1a2b7d POLYGON ((-97.1721233852856 32.59996829071199,...

Я хотел бы преобразовать это в файл kml / kmz, но я никогда раньше не работал с этим типом файла, поэтому я не знаю, как действовать дальше. Я пытался использовать этот скрипт, но он требует некоторых поле высоты, которого у меня нет. Есть ли хороший/простой способ сделать это в python? Я хотел бы избежать использования инструментов онлайн-конвертера, если это возможно.


person edub    schedule 25.03.2016    source источник


Ответы (2)


fiona библиотека, обернутая geopandas, неофициально поддерживает драйвер KML, который необходимо включить вручную.

import geopandas as gpd
import fiona

fiona.supported_drivers['KML'] = 'rw'

gdf = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
gdf.to_file('test.kml', driver='KML')

Обратите внимание, что он также может читать файлы KML, но не очень хорошо работает с «вложенными» файлами kml, см. суть для более подробной информации

person MCMZL    schedule 17.10.2018
comment
Для меня это сработало только наполовину. Геометрия сохранилась хорошо. Но в сохраненных файлах KML были отброшены первые два значения столбцов данных и имена последних двух столбцов данных, поэтому найдена только часть данных (все, кроме первых двух столбцов), и даже эти данные имеют сдвинутые имена столбцов. Например. если бы я сохранил A B C D 7 8 9 0 1 2 3 4 Результат был бы: A B 9 0 3 4 - person ErnestScribbler; 19.06.2019
comment
Использование этого метода окрашивает все полигоны в красный цвет. Есть ли способ установить цвет так, чтобы он оставался между геопандами и кмл? - person skrhee; 05.11.2019
comment
@skrhee Как вы можете сказать, что ваши полигоны внутри kml окрашены в красный цвет. Что вы используете для визуализации? - person MCMZL; 05.11.2019
comment
@MCMZL Я использую Google Earth для визуализации. Благодарю за ваш ответ! - person skrhee; 06.11.2019
comment
Похоже, что красный цвет является цветом по умолчанию с драйвером fiona. Может быть его можно изменить, но в документации не нашел. Быстрое решение состоит в том, чтобы использовать sed в bash, чтобы заменить красный цвет чем-то другим. - person MCMZL; 08.11.2019

Так что, возможно, я нашел решение...

Я установил библиотеку абстракции геопространственных данных и использовал ogr2ogr.

Как я объяснил в своем вопросе, у меня есть геопандас GeoDataFrame с полигонами и соответствующими цветами, которые я записываю в файл json:

with open('/Users/Me/Documents/mydata.json', 'w') as f:
    f.write(gdf.to_json())

В Терминале/командной строке я набираю:

ogr2ogr -f KML /Users/Me/Documents/mydata.kml /Users/Me/Documents/mydata.json

Технически вы можете вызвать эту команду из скрипта Python, используя библиотечный «подпроцесс»:

import subprocess
subprocess.call("ogr2ogr -f KML /Users/Me/Documents/mydata.kml /Users/Me/Documents/mydata.json",shell=True)

Это создает файл kml с моими полигонами на основе широты и долготы. Однако он автоматически устанавливает для всех цветов линий красный цвет без заливки (хотя в моем json-файле есть цвета). Я не нашел хорошего решения этой проблемы, поэтому редактировал KML-файл вручную, чтобы получить желаемый стиль.

person edub    schedule 11.04.2016
comment
Это заканчивается ошибкой ERROR 4: Failed to read GeoJSON data FAILURE: Unable to open datasource....json' with the following drivers. - person nish; 11.11.2016
comment
Кто-нибудь смог разобраться в цветах? - person skrhee; 05.11.2019