Deudas-Técnicas
Instrucciones
- Para agregar una nueva deuda, seguir el formato
#### <fecha>: Nombre / descripción corta del problema - Asignarle un nombre (codename) en mayúscula a cada deuda para poder identificarla en el código
- Cuando tengamos que hacer mal código, agreguemos las líneas:
# TODO: DEUDA-TECNICA: <codename> [fecha si quieren]
# <cualquier comentario que quieran dejar
2020-06-30: Filepush
codename: FILEPUSH
Actualmente para consumir imágenes usando filepush se le hace un request directo a la URL. Esto está mal porque (como nos está pasando con el nuevo motor de imágenes), al mínimo cambio hay que buscar en todo el proyecto para ver dónde se usa y realizar los cambios. Si bien tenemos a nuestro amigo Ctrl + Shift + f de PyCharm (o su editor amigo), esto está mal porque no es la manera en la que se resuelve este tipo de problemas. Una de las maneras es encapsulando en una clase y dándole una interfaz de los métodos mínimos e indispensables que podemos necesitar. Cualquier lógica sobre el FilePush debería quedar encapsulada en la clase FilePush y el resto del código no tendría ni que enterarse.
Cualquier modificación que le quieran hacer a la misma, más que bienvenida.
2020-06-30: Llamadas a Geoserver
codename: GEOSERVER
Igual que en el caso anterior, pero con geoserver. Hay muchísimas llamas a geoserver distintas. Con el nuevo motor de imágenes, y cuando tengamos migrado rinde y planet al modelo de multiples capas, hay que volarlo.
2020-06-30: Nuevo motor de imágenes
codename: SENTINEL_V2
Para hacer el nuevo motor de imágenes hubo que adaptar muchas de las APIs del proyecto para que sea transparente tanto web como mobile. Principalmente se trata de consultas a la BD que se bifurcan según el origen de las capas. El día que se unifique todo en un solo lugar podríamos resolver esta deuda.
2020-07-01: Codigo descontinuado
codename: DEPRECATED
El código que no se use mas se comenta, indicando la fecha, para eliminarlo definitivamente luego de un tiempo.
2020-07-14: Pixel size no es el mismo en X que en Y en todas las proyecciones
codename: PIXEL_SIZE
Empezamos usando el pixel size como si fuera el mismo valor en X que en Y. El tema es que cuando hacemos reproyecciones esto no es necesariamente cierto (basta con cambiar en QGIS de una a la otra y ver cómo se deforma el mapa). De momento se toma una o el promedio de las dos pero trae problemas a veces, como que al rasterizar le falte o sobren píxeles (más notorio cuanto mayor es la imagen porque esa diferencia se va sumando). De momento el fix que encontré al rasterizar es copiar la geotransformada en una variable y setearle el height y width. Si tienen que hacer eso en algún momento, pongan este codename. Va el ejemplo de lo que suelo hacer:
raster_img = models_raster.Raster(filepath)
tmp_geotransform = raster_img.geotransform
tmp_geotransform.height, tmp_geotransform.width = raster_img.data.shape
mask = preproc_raster.Rasterizer()\
.from_wkt(data_lote['shape_3857'], raster_img.crs, tmp_geotransform)
2020-09-24: Polígonos inválidos
codename: POLIGONOS-INVALIDOS
La limpieza de polígonos inválidos generaba polígonos duplicados. Llevar la limpieza de polígonos a la clase GeoJSON o a alguna clase padre para mantener la solución en un sitio.