Generador Archivo .kml


En el transcurso de un proyecto, a menudo es necesario mapear ubicaciones específicas donde se llevarán a cabo actividades con el fin de gestionar la logística o incluso proporcionar un presupuesto. Sin embargo, en muchas ocasiones, solo se nos proporcionan las coordenadas de los puntos. Si se trata de unas pocas ubicaciones, es relativamente fácil mapear cada punto individualmente. Sin embargo, cuando nos enfrentamos a un gran número de ubicaciones, esta tarea se vuelve extremadamente tediosa. Con el objetivo de abordar esta necesidad, he desarrollado un programa en Python que permite generar archivos .kml a partir de las coordenadas proporcionadas.

Primero se procede a presentar los datos de manera ordenada tal como indica el siguiente cuadro:

CARPETA: Dentro del archivo .kml se creara una carpeta donde estarán agrupadas las ubicaciones.

NOMBRE: Nombre de la ubicación a mapear.

LATITUD Y LONGITUD: En formato decimal.

COLOR: Se puede colocar los colores AMARILLO, ROJO, VERDE, AZUL.

Luego esta información se copia en un bloc de notas y se guarda en la misma ubicación del programa con el nombre de data.txt

Una vez que ejecutes el script, se generará un archivo llamado “locations.kml” dentro de la carpeta “KML”. Este archivo contendrá todos los puntos mapeados.

Este programa es eficiente y ahorra una gran cantidad de tiempo en el proceso de mapeo. Sin embargo, es importante tener en cuenta que los datos que se colocan en el archivo de texto “data.txt” deben estar correctamente ordenados y estructurados.

import os
# Opening my .txt file where my locations are defined, and storing in locations variable as a list
path_project = 'D:/Git Files/Scripts/KML/'
path_locations = path_project + 'data.txt'
my_locations_file = open(path_locations, encoding='utf-8')
locations_raw = my_locations_file.readlines()
db_locations = []
for i in range(len(locations_raw)):
db_locations.append(locations_raw[i].strip('').split('\t'))
def gen_kml():
folder_name = 'KML'
if not os.path.exists(folder_name):
os.makedirs(folder_name)
config_file = open(path_project + folder_name + '/' + 'locations.kml', 'w')
yellow_code = ['m_ylw-pushpin', 's_ylw-pushpin', 's_ylw-pushpin_hl', 'http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png']
blue_code = ['msn_blue-pushpin', 'sn_blue-pushpin', 'sh_blue-pushpin', 'http://maps.google.com/mapfiles/kml/pushpin/blue-pushpin.png']
green_code = ['m_ylw-pushpin00', 's_ylw-pushpin000', 's_ylw-pushpin_hl0', 'http://maps.google.com/mapfiles/kml/pushpin/grn-pushpin.png']
red_code = ['msn_red-pushpin', 'sn_red-pushpin', 'sn_red-pushpin', 'http://maps.google.com/mapfiles/kml/pushpin/red-pushpin.png']
placemark_colors = [yellow_code, blue_code, green_code, red_code]
pushpin_colors = {'AMARILLO': '<styleUrl>#m_ylw-pushpin</styleUrl>',
'AZUL': '<styleUrl>#msn_blue-pushpin</styleUrl>',
'VERDE': '<styleUrl>#m_ylw-pushpin00</styleUrl>',
'ROJO': '<styleUrl>#msn_red-pushpin</styleUrl>'}
# Defining default file template
config_file.write("""<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2"
xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<Document>
<name>Locations.kml</name>
<StyleMap id="style_Template1">
<Pair>
<key>normal</key>
<styleUrl>#style_Template1_normal</styleUrl>
</Pair>
<Pair>
<key>highlight</key>
<styleUrl>#style_Template1_highlight</styleUrl>
</Pair>
</StyleMap>""")
# Defining yellow, blue, green, red color templates
for color in placemark_colors:
config_file.write('''<StyleMap id="''' + color[0] + '''">
<Pair>
<key>normal</key>
<styleUrl>#''' + color[1] + '''</styleUrl>
</Pair>
<Pair>
<key>highlight</key>
<styleUrl>#''' + color[2] + '''</styleUrl>
</Pair>
</StyleMap>
<Style id="''' + color[1] + '''">
<IconStyle>
<scale>1.1</scale>
<Icon>
<href>''' + color[3] + '''</href>
</Icon>
<hotSpot x="20" y="2" xunits="pixels" yunits="pixels"/>
</IconStyle>
</Style>
<Style id="''' + color[2] + '''">
<IconStyle>
<scale>1.3</scale>
<Icon>
<href>''' + color[3] + '''</href>
</Icon>
<hotSpot x="20" y="2" xunits="pixels" yunits="pixels"/>
</IconStyle>
</Style>''')
old_site_project = ''
for site in db_locations:
site_project = site[0]
site_location = site[1]
site_latitude = site[2]
site_longitude = site[3]
site_color = site[4]
# Create a folder for every group of locations
if site_project != old_site_project:
if old_site_project != '':
config_file.write('</Folder>')
config_file.write('<Folder>')
config_file.write('<name>' + site_project + '</name>')
config_file.write('<open>1</open>')
# Put site on map
config_file.write('<Placemark>')
config_file.write('<name>' + site_location + '</name>')
config_file.write('<styleUrl>#style_Template1</styleUrl>')
config_file.write(pushpin_colors.get(site_color))
config_file.write('<Point>')
config_file.write('<coordinates>' + site_longitude + ',' + site_latitude + '</coordinates>')
config_file.write('</Point>')
config_file.write('</Placemark>')
# Keeping track of site project folder
old_site_project = site_project[:]
config_file.write('</Folder>')
config_file.write('</Document>')
config_file.write('</kml>')
config_file.close()
gen_kml()
view raw KML_GEN.py hosted with ❤ by GitHub