We will create a python scripts to parse a KML to CSV file. We use the external shared libraries GEOS and GDAL in GeoDjango to perform.

GEOS is a C++ library for performing geometric operations, and is the default internal geometry representation used by GeoDjango.

GDAL stands for Geospatial Data Abstraction Library, and is a veritable “Swiss army knife” of GIS data functionality.

Import Libraries

from django.contrib.gis.gdal import DataSource

from django.contrib.gis.geos import GEOSGeometry

import csv

DataSource is a wrapper for the OGR data source object that supports reading data from a variety of OGR-supported geospatial file formats and data sources using a simple, consistent interface.

GEOSGeometry is the base class for all GEOS geometry objects.

csv implements classes to read and write tabular data in CSV format.

Append data to CSV File

Make a function which append the new row to CSV file.

def writerow_append_csv(csvfile, row):

with open(csvfile, "a") as output:

writer = csv.writer(output, lineterminator='

')

writer.writerow(row)

Make a function extracting the layer features (layer_name, geom_type, Name, description) from GDAL DataSource. We only get GEOM type name starts with Point and LineString . Then use writerow_append_csv function to write features to CSV file.

def write_layer_features_to_csv(layer):

for feat in layer:

if(feat.geom.geom_type.name.startswith('Point')):

r_point = []

r_point += [feat.layer_name,

feat.geom.geom_type.name,

feat.geom.coords,

feat.get('Name'),

feat.get('description')]

# write point to csv

writerow_append_csv(pointsFile, r_point)

elif(feat.geom.geom_type.name.startswith('LineString')):

line_string = []

line_string += [feat.layer_name,

feat.geom.geom_type.name,

feat.geom.coords,

feat.get('Name'),

feat.get('description')]

# write line string to csv

writerow_append_csv(lineStringsFile, line_string)

else:

print(feat.geom.geom_type.name, feat.get('Name'))

Iteration via DataSource Layer