Si tu dron no escribe la posición GPS en los metadatos de la imagen, este es un tutorial que puede ser de tu interés. Cuando tengas las imágenes sin ninguna referencia de ubicación en los metadatos y las ubicaciones de las imágenes estén en un archivo de texto, puede usar el código que se describe a continuación para generar imágenes de drones geolocalizados compatibles con OpenDroneMap. El tutorial muestra todos los pasos involucrados además de tener algunos datos de muestra para practicar.
Tutorial
Código
Este es el código en Python utilizado:
#!pip install piexif
import piexif
from PIL import Image
import os
import pandas as pd
Open source path and destination path
orgPath='../sensordata/'
destPath='../images/'
Open position data as pandas dataframe
gpsPos = pd.read_csv('../txt/telemetry.dat',index_col=0)
gpsPos.head()
| latitude | longitude | altitude | |
|---|---|---|---|
| imageName | |||
| DSC00038.JPG | -11.929715 | -37.662185 | 167.057 |
| DSC00039.JPG | -11.929877 | -37.662186 | 167.417 |
| DSC00040.JPG | -11.930037 | -37.662191 | 167.231 |
| DSC00041.JPG | -11.930192 | -37.662196 | 166.544 |
| DSC00042.JPG | -11.930352 | -37.662197 | 167.226 |
Definition of working function for lat and lon parsing
def convertLat(lat):
if lat > 0:
latMarker = b'N'
else:
latMarker = b'S'
lat = abs(lat)
degress = int(lat)
tempMinutes = (lat % 1)*60
minutes = int(tempMinutes)
tempSeconds = (tempMinutes % 1)*60
seconds = int(tempSeconds * 10000)
latTuple = ((degress, 1), (minutes, 1), (seconds, 10000))
return latMarker, latTuple
def convertLon(lon):
if lon > 0:
lonMarker = b'E'
else:
lonMarker = b'W'
lon = abs(lon)
degress = int(lon)
tempMinutes = (lon % 1)*60
minutes = int(tempMinutes)
tempSeconds = (tempMinutes % 1)*60
seconds = int(tempSeconds * 10000)
lonTuple = ((degress, 1), (minutes, 1), (seconds, 10000))
return lonMarker, lonTuple
Loop over files to save geolocated version
for index, row in gpsPos.iterrows():
#working with the exif data
exifDict = {'GPS':
{0: (2, 4, 0, 0),
5: 0}
}
latMarker, latTuple = convertLat(row.latitude)
lonMarker, lonTuple = convertLon(row.longitude)
exifDict['GPS'][1] = latMarker
exifDict['GPS'][2] = latTuple
exifDict['GPS'][3] = lonMarker
exifDict['GPS'][4] = lonTuple
exifDict['GPS'][6] = (int(row.altitude*1000),1000)
#working with the file
#opening the original file
orgName=os.path.join(orgPath,index)
img=Image.open(orgName)
#write the destination file
destNname=os.path.join(destPath,index)
exifBytes = piexif.dump(exifDict)
img.save(destNname, exif=exifBytes)
Comando en ODM para procesar las imagenes:
docker run -it --rm -v "$(pwd)/images:/code/images" -v "$(pwd)/odm_orthophoto:/code/odm_orthophoto" -v "$(pwd)/odm_texturing:/code/odm_texturing" opendronemap/odm
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.