Si tiene un conjunto de imágenes de drones y desea conocer la ubicación de las imágenes, este tutorial puede ser de su interés. Hemos realizado un ejemplo aplicado que recupera los metadatos geoespaciales de la cámara del dron para un grupo de imágenes y realiza una representación geoespacial en un mapa con el nombre de la imagen disponible como ventana emergente. El tutorial se realiza bajo un Jupyter notebook con Python y Folium.
Para este tutorial, necesita un entorno de conda geoespacial. Sigue este otro tutorial:
Tutorial
Código
#!pip install exif
#!pip install folium
import os
import folium
import numpy as np
import pandas as pd
from exif import Image
imageFolder = '../VUELO1/'
imageList = os.listdir(imageFolder)
#filter list to image files
imageList = [i for i in imageList if i[-4:]=='.JPG']
imageList[:5]
['DJI_0591.JPG',
'DJI_0592.JPG',
'DJI_0593.JPG',
'DJI_0594.JPG',
'DJI_0595.JPG']For one image
imagePath = os.path.join(imageFolder, imageList[0])
imageRead = open(imagePath,'rb')
imageObject = Image(imageRead)
imageObject.list_all()[:5]
['image_description', 'make', 'model', 'orientation', 'x_resolution']#show geospatial exif records
print(imageObject.gps_latitude)
print(imageObject.gps_longitude)
print(imageObject.gps_latitude_ref)
print(imageObject.gps_longitude_ref)
(15.0, 27.0, 59.0756)
(74.0, 42.0, 40.3897)
S
Wdef getCoords(imageObject):
latTuple = imageObject.gps_latitude
lonTuple = imageObject.gps_longitude
latRef = imageObject.gps_latitude_ref
lonRef = imageObject.gps_longitude_ref
latCoord = latTuple[0] + latTuple[1]/60 + latTuple[2]/3600
lonCoord = lonTuple[0] + lonTuple[1]/60 + lonTuple[2]/3600
#for negatives lats and lons
if latRef == 'S':
latCoord = -latCoord
if lonRef == 'W':
lonCoord = -lonCoord
return latCoord, lonCoord
#get lat and lon for one image
lat, lon = getCoords(imageObject)
print(lat, lon)
-15.466409888888888 -74.71121936111112Working for all images
#get an pandas dataframe for lats and lons
latLonDf = pd.DataFrame(columns=["Lat","Lon"])
for image in imageList:
imagePath = os.path.join(imageFolder, image)
imageRead = open(imagePath,'rb')
imageObject = Image(imageRead)
lat, lon = getCoords(imageObject)
#print(lat, lon)
latLonDf.loc[image,"Lat"]=lat
latLonDf.loc[image,"Lon"]=lon
latLonDf.head()
| Lat | Lon | |
|---|---|---|
| DJI_0591.JPG | -15.46641 | -74.711219 |
| DJI_0592.JPG | -15.468541 | -74.714916 |
| DJI_0593.JPG | -15.468456 | -74.714952 |
| DJI_0594.JPG | -15.468331 | -74.714941 |
| DJI_0595.JPG | -15.468186 | -74.714919 |
### Plotting images coordinates
meanLat = latLonDf.Lat.mean()
meanLon = latLonDf.Lon.mean()
m = folium.Map(location=[meanLat,meanLon], zoom_start=17, control_scale=True)
for index, row in latLonDf.iterrows():
folium.CircleMarker(location=[row.Lat,row.Lon], radius=2, popup=index).add_to(m)
m
latLonDf.to_csv('imagesLatLon')
Datos de entrada
Puede descargar los datos de entrada desde este enlace.

FloPy es la librerìa de Python que construye y ejecuta modelos MODFLOW; esta librería se ha mejorado para proporcionar un soporte completo de MODFLOW 6 y la mayor parte de su desarrollo está relacionado con la funcionalidad de MODFLOW 6, herramientas para usar datos espaciales vectoriales, rasters y funcionalidades comunes de ploteo y exportación.
Python es un lenguaje de programación sencillo y potente; su simplicidad es notable en comparación con otros lenguajes de programación y su potencia se basa en la cantidad de herramientas disponibles para las diferentes áreas de estudio.
Hemos desarrollado un programa completo en modelamiento de aguas subterráneas con MODFLOW y FloPy que abarca desde los temas esenciales en Python hasta casos aplicados de modelamiento regional e intrusión marina. El programa está diseñado para brindarle al estudiante un enfoque metodológico para aprender FloPy basado en una serie de ejemplos aplicados junto con las opiniones/experiencias del profesor y la revisión del software.