Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Filtrar por fichero geojson #79

Merged
merged 2 commits into from
Dec 31, 2021
Merged

Filtrar por fichero geojson #79

merged 2 commits into from
Dec 31, 2021

Conversation

Crashillo
Copy link
Member

A través del parámetro -g o --geojson puedes especificar la ruta a un fichero con un geojson.

Faltarían las pruebas de si no es válido y demás casos que fijo me he dejado, échale un ojo y me cuentas.

@javiersanp javiersanp linked an issue Dec 31, 2021 that may be closed by this pull request
if self.zone:
"""Filter feat by zone label if needed."""
return len(self.zone) == 0 or self.building.get_label(feat) in self.zone
if self.options.geojson:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Este método se usa para filtrar edificios, las partes, piscinas y direcciones. Si ponemos este filtro, el polígono split tendría que estar dibujado de forma quirúrgica para meter dentro exactamente lo que queremos y que no se cuele una parte de un edificio y se quede huerfana, sin su edificio o una dirección lo mismo.
La idea sería filtrar el fichero de zonificación. De esa forma no hay que ser tan preciso dibujando el polígono. Da igual si se dibuja un poco más grande y se pasa por el medio de otras zonas, sólo se van a incluir las que están contenidas (contains) no las que toque (overlaps).
Como se va a generar un archivo geojson necesario para el gestor de tareas y ese archivo debe contener sólo las zonas que nos interesan mi idea era eliminar físicamente las zonas. Si las capas de zonificación (urban y rustic) contienen sólo las zonas del split. Aquí no hace falta filtrar y resto del programa queda igual casi.
Si puedes, hay que aplicar el código que puse en #78 (la condición de filtro estaba mal, la he negado) a un distrito de Madrid. Para evaluar si tarda mucho tiempo en eliminar las zonas.
Por que otra forma de hacerlo sería obtener una lista de las zonas buenas, ponerla en options.zone y procesar como si se hubiera usado la opción -o. En ese caso, al crear el zoning.geojson habría que hacerlo sobre una selección de las zonas. Necesitamos evaluar cual de las dos formas es más rápida para Madrid.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

He hecho una prueba rápida eliminando en Madrid todas las zonas y tarda cero coma.
Otro motivo por el que interesa eliminar es que process_zoning tarda un montón, con sólo un distrito tardará menos.
El problema con esta manera de hacerlo es en get_buildings, las llamadas a building.get_labels necesitan que las capas de zonificación estén completas, mientras que buildings.append que estén filtradas. Quizá es necesario separar cosas.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, aunque sigo sin tener claro dónde llamarlo. La definición del split lo pones en get_building, y quito el contains del zone_query, hasta ahí bien. ¿Dónde aplico el corte, en el get_zoning?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perdona pero no tengo costumbre de manejar PR y me lio. La sugerencia que puse es para poner fuera de get_buildings, no dentro. De hecho la reemplaza. El corte de zonificación lo hace self.zone_split. La llamada a zone_split tiene que ser posterior a los get_labels y anterior a los append. Creo que falta poner en self.options.zone una lista con las etiquetas de las zonas filtradas y el programa pasará a comportarse igual que si hubiéramos usado -o

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mira a ver el último commit, he metido los cambios sugeridos, excepto el verdadero filtrado, el contenido de la función zone_split. Confírmame si es así lo que quieres, luego ya faltaría procesar todas las posibles feature y realizar el corte, según dices, esa misma función cortaría self.building no?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bueno, un detalle menor, por gramática inglesa y de programación, la función debería llamarse split_zoning, no al revés como he puesto 😇

catatom2osm/app.py Show resolved Hide resolved
catatom2osm/app.py Show resolved Hide resolved
@Crashillo
Copy link
Member Author

Un detalle importante, y es que estoy mergeando esta PR contra tu development, no contra tu master. Aviso por si acaso

@javiersanp
Copy link
Member

javiersanp commented Dec 31, 2021 via email

Copy link
Member

@javiersanp javiersanp left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Creo que esa es la idea, seguimos por ahí.

@javiersanp javiersanp merged commit e231923 into OSM-es:development Dec 31, 2021
@javiersanp
Copy link
Member

javiersanp commented Dec 31, 2021 via email

@Crashillo Crashillo deleted the development-polygon branch December 31, 2021 11:04
This pull request was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Opción para dividir un municipio grande usando un archivo
2 participants