Python Advanced Series — Geoespacial

19. Cálculos con coordenadas GPS

19. Calculations with GPS Coordinates

Calcula radios de influencia o distancias exactas entre clientes y almacenes cruzando mapas y datos estructurados.

Calculate influence zones or exact distances between customers and warehouses by combining maps and structured data.

⚠️ Advertencia de ciberseguridad y producción ⚠️ Cybersecurity and production warning

Este ejercicio es solo para aprendizaje y pruebas. No ejecutes scripts contra datos reales, ambientes de producción, APIs externas, portales con login, datos sensibles, sistemas críticos o repositorios empresariales sin autorización, respaldos, pruebas previas, permisos mínimos, control de cambios y cumplimiento de los protocolos de ciberseguridad de tu organización.

This exercise is for learning and testing only. Do not run scripts against real data, production environments, external APIs, login portals, sensitive data, critical systems, or enterprise repositories without authorization, backups, prior testing, least-privilege permissions, change control, and compliance with your organization's cybersecurity protocols.

Objetivo del ejercicio

Exercise objective

Usar GeoPandas para convertir puntos geográficos en geometrías y crear zonas de influencia alrededor de ubicaciones.

Use GeoPandas to convert geographic points into geometries and create influence zones around locations.

Datos sintéticos

Synthetic data

clientelatlon
Cliente A25.7617-80.1918
Cliente B25.8576-80.2781

Ejemplo base

Base example

import geopandas as gpd

puntos = gpd.read_file("clientes.geojson")
puntos["zona_influencia"] = puntos.buffer(5000)

Resultado esperado

Expected result

clientebuffer_metrosstatus
Cliente A5000created
Cliente B5000created

Script completo

Complete script

# ==========================================================
# Python Advanced Topic 19
# GPS Coordinate Calculations with GeoPandas
# ==========================================================

# pip install geopandas shapely pandas

import pandas as pd
import geopandas as gpd
from shapely.geometry import Point

df = pd.DataFrame({
    "cliente": ["Cliente A", "Cliente B", "Cliente C"],
    "lat": [25.7617, 25.8576, 25.7907],
    "lon": [-80.1918, -80.2781, -80.1300]
})

geometry = [Point(xy) for xy in zip(df["lon"], df["lat"])]
gdf = gpd.GeoDataFrame(df, geometry=geometry, crs="EPSG:4326")

# Project to meters for buffer calculations
gdf_meters = gdf.to_crs(epsg=3857)
gdf_meters["zona_influencia"] = gdf_meters.geometry.buffer(5000)

gdf_meters.to_file("clientes_zona_influencia.geojson", driver="GeoJSON")
print(gdf[["cliente", "lat", "lon"]])
print("GeoJSON created: clientes_zona_influencia.geojson")

Salida esperada en consola

Expected console output

     cliente      lat      lon
0  Cliente A  25.7617 -80.1918
1  Cliente B  25.8576 -80.2781
2  Cliente C  25.7907 -80.1300
GeoJSON created: clientes_zona_influencia.geojson

Aplicaciones reales

Real-world applications

  • Crear zonas de servicio.
  • Medir cobertura de almacenes.
  • Cruzar clientes con mapas.
  • Preparar capas para GIS.
  • Create service areas.
  • Measure warehouse coverage.
  • Combine customers with maps.
  • Prepare layers for GIS.

Recomendaciones

Recommendations

  • Usar un CRS en metros para distancias.
  • Validar latitud y longitud antes de calcular.
  • No mezclar grados con metros.
  • Revisar privacidad de ubicaciones exactas.
  • Use a meter-based CRS for distances.
  • Validate latitude and longitude before calculating.
  • Do not mix degrees with meters.
  • Review privacy for exact locations.

Valor del tópico

Topic value

Los cálculos geoespaciales permiten responder preguntas de cobertura, distancia y territorio que no se ven en tablas tradicionales.

Geospatial calculations answer coverage, distance, and territory questions that traditional tables do not reveal.