Как создать файл .kml из фрейма данных? - PullRequest
1 голос
/ 04 ноября 2019

Мне нужно создать файл .kml из фрейма данных с более чем 800 районами. Это то, что я сделал до сих пор:

1) Считайте файл .csv (РИС. 1), используя PANDAS

2) Создайте новый фрейм данных, выбрав только первые 3 столбца (долгота,широта, высота)

3) Создайте список кортежей из фрейма данных

4) Создайте файл .kml и выполните некоторые стили (цвета)

Вся эта процедура работыздорово ТОЛЬКО когда есть 1 район. Теперь мне нужно сделать то же самое, но с более чем 800 районами. На фиг.2 показан пример с двумя районами (ACTONO и AILSACRAIGO).

При преобразовании кадра данных в список кортежей, как заставить "python" узнать, что существует много округов?

Я считаю, что эти строки должны быть улучшены:

a) Здесь мне понадобится список кортежей (по одному на каждый район)

#Converting the dataframe to a list of tuples
tuples = [tuple(x) for x in df_modify.values]

b) И здесь, «outboundaryies» придется менять для каждого из кортежей

pol = kml.newpolygon(name= 'ACTONO', description= 'Acton County', 
outerboundaryis=tuples, extrude=extrude, altitudemode=altitudemode)

Это весь код:

КОД ДЛЯ .CSV С 1 РАЙОНОМ

import pandas
import simplekml

kml = simplekml.Kml()

#Using PANDAS to read .csv and chosing the first 3 columns
df = pandas.read_csv('C:\\Users\\disa_ONTshp.csv')
df_modify=df.iloc[:, [0,1,2]]

#Converting the dataframe to a list of tuples
tuples = [tuple(x) for x in df_modify.values]


#Creating a .kml file
extrude=1
altitudemode = simplekml.AltitudeMode.relativetoground
pol = kml.newpolygon(name= 'ACTONO', description= 'Acton County', 
outerboundaryis=tuples, extrude=extrude, altitudemode=altitudemode)

#Styling colors
pol.style.linestyle.color = simplekml.Color.green
pol.style.linestyle.width = 5
pol.style.polystyle.color = simplekml.Color.changealphaint(100, 
simplekml.Color.green)

#Saving
kml.save("Polygon Styling.kml")

РИС. 1 (1 РАЙОН)

FIG 1

РИС. 2 (2 РАЙОНА)

CSV file

1 Ответ

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

Это ответ. Мне нужен был словарь данных.

import pandas as pd
import simplekml
import pprint
import numpy as np


kml = simplekml.Kml()

###LOADING THE .csv FILE WITH ALL THE COORDINATES (USING QGIS)
df = pd.read_csv('C:\\Users\\file.csv')



###ADDING A COLUMN "altitude" WITH RANDOM VALUES FROM 200 TO 2000
df['altitude']=df.groupby('name').name.transform(lambda x: np.random.randint(200,2000))

###CALLING THE COLUMNS OF INTEREST
df=df[['longitude', 'latitude', 'altitude', 'name']]



###CREATING A DICTIONARY OF DATAFRAMES (ONE FOR EACH DISTRICT) 
dict_dataframes=dict(tuple(df.groupby('name')))


###CALLING EACH DATAFRAME FROM THE DICTIONARY
for name, df in dict_dataframes.items():


    ###CREATING A LIST OF TUPLES WITH THE COLUMNS OF THE DATAFRAME
    tuples = [tuple(x) for x in df.values]


    extrude=1
    altitudemode = simplekml.AltitudeMode.relativetoground

    pol = kml.newpolygon(name = name, description="District of " + name, outerboundaryis=tuples, extrude=extrude, altitudemode=altitudemode)
    pol.style.linestyle.color = simplekml.Color.honeydew
    pol.style.linestyle.width = 3
    pol.style.polystyle.color = simplekml.Color.changealphaint(100, simplekml.Color.navy)


###SAVING THE FILE    
kml.save('C:\\Users\\3d_file.kml')
...