1

800 を超える地区のデータフレームから .kml ファイルを作成する必要があります。これは私がこれまでに行ったことです:

1) PANDAS を使用して .csv ファイル (図 1) を読み取る

2) 最初の 3 列 (経度、緯度、高度) のみを選択して、新しいデータフレームを作成します。

3) データフレームからタプルのリストを作成する

4) .kml ファイルを作成し、スタイリング (色) を行います。

このすべての手順は、地区が 1 つある場合にのみうまく機能します。今、私は同じことをする必要がありますが、800 を超える地区を対象としています。図 2 では、2 つの地区 (ACTONO と AILSACRAIGO) の例が示されています。

データフレームをタプルのリストに変換するとき、「python」に多くの地区があることをどのように認識させることができますか?

これらの行は改善する必要があると思います:

a) ここで、タプルのリストが必要になります (地区ごとに 1 つ)。

#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)

これはすべてのコードです:

1 地区の .CSV のコード

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 区)

図1

図 2 (2 つの地区)

CSVファイル

4

1 に答える 1

1

これが答えです。私が必要としていたのは、データフレームの辞書でした。

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')
于 2019-11-05T21:21:16.523 に答える