Releases: VIDA-NYU/UrbanMapper
👀 Urban Mapper Gets Smarter!
Hi folks!
Very pleased to announce the public release of Urban Mapper (v0.1.5), which involves work ranging from optimisation of the urban pipeline module in various stages, passing by improving the flexibility of the loaders/enrichers to handle multi-dataset altogether at the same time, to making the documentation more approachable for newcomers —— all this since the first public release of UM, the v0.1.2! 🎉
Note
The project’s long-term trajectories are still unclear, hence why only alpha versions are being released. Once a roadmap is clear, based on the OSCUR funding and project, the team will have a clearer view about what minor to major versions shall be.
Over the last few months, we’ve been listening to feedback across various channels (LinkedIn, Discord, Zulip, etc. — Special thanks to @mfisher87, @MohanadDiab, @MrPowers, and @hunarjain09 to name a few, actually, those having a GitHub account 👀) and adding pretty-cool new capabilities. Urban Mapper now allows you to combine multiple datasets in a single pipeline by nature, consume geometries directly from WKT strings, load datasets from pandas DataFrames or Hugging Face without saving them to disk prior, and install optional modules only when you need them! ~~> As follows.
❝Highlights
-
Multiple datasets in one pipeline – thanks to @fabiofelix (PR #68). You can now specify several urban datasets (e.g.
taxi tripsandPLUTOat the same time) in the same pipeline and have imputers, filters and enrichers operate on all of them together. No more manual post‑processing or FIFO ofUMpipelines. -
Geometry columns – courtesy of @soniacq and @fabiofelix (PR #71). Loaders accept a
geometry_columnwith WKT geometries (POINT,LINESTRING,POLYGON, …), preserving full spatial detail and eliminating the need for separate latitude/longitude columns. The imputer and enricher have been updated accordingly, and you can now pass source/target coordinate reference systems as a tuple. -
Refined loader hierarchy – by @fabiofelix (PR #80). A new
FileLoaderbase class and dedicatedDataFrameLoaderandHuggingFaceLoaderallow you to load CSV, Parquet, Shapefile, pandas DataFrame or HuggingFace datasets through a unified API. No more saving intermediate files, especially for pipelines, was not much of a problem in a step-by-step manner. -
Optional modules, DL on demand – introduced by @simonprovost (PR #82). Urban Mapper is now modular: the core remains lightweight, while third-party-based features such as Auctus Search (utilising Auctus from @soniacq, @julianafreire & VIDA lab's team) , @skrub-data through @Skrub (By @probabl-ai and team), @JupyterGIS (By @QuantStack maintained by @mfisher87 and teams @SchmidtDSE) and the
UMpipeline generator via LLMs are optional extras. This reduces the default installation by roughly 100 packages and speeds up setup. -
First CI / unit tests – thanks to @fabiofelix (PR #74) initially started by @ctsilva in #47. A pytest‑based suite now covers core modules with unit, integration, and functional tests and runs automatically via GitHub Actions.
-
Better documentation & examples – major rework by @simonprovost (PR #66). The Getting Started section now includes interactive example notebooks on ReadtheDocs. The homepage aligns with the README, emojis were removed for clarity (thanks to @Mary-h86 for the feedback!), and extraneous guides were trimmed. Additional changes improved Mermaid diagrams and consolidated branding & UX (PR #58).
-
MCP integration – new links in the documentation point to the Urban Mapper Model Context Protocol (PR #75). Check out the MCPStack tutorial to see how Urban Mapper can be used with Jupyter and LLMs to build reproducible workflows.
-
Grey/dark‑mode friendly README & updated templates – by @simonprovost (PR #78). The README now adapts to dark themes, contributor docs have been polished, and issue templates have been modernised.
-
Funding acknowledgement – added OSCUR NSF funding support logo (PR #73).
❝Lighter Fixes & refinements
-
Documentation admonitions now display correctly (PR #69).
-
The address imputer no longer erases row features, and the loader respects the CRS argument (PR #71).
-
Several errors in the
layermodule were fixed: wrong parameter counts when retrieving bounding boxes, wrong index/column names when mapping data, and incorrect arguments inmap_nearest(PR #74). -
Enrichers now receive separate configurations in pipelines with multiple enrichers (PR #81).
-
The
with_columnsmethod cannot be called repeatedly (per loader) to avoid confusion when using multiple loaders (PR #83).
❝What’s next?
On @VIDA-NYU's side, @ctsilva and the team are actively brainstorming, but overall there is a need to integrate with other libraries from the OSCUR initiative; yet a couple of things that could be publicly tracked by everyone is (1) the predictive module started being explored by @fabiofelix at #76, or (2) a potential integration of a more flourished map visualisation engine by @joaorulff with pyautark, a python-integration of Autark by @urban-toolkit and team!
On a more OSS's side of things, we've identified use-cases and usefulness as to potentially integrate pretty cool tools from @developmentseeds (e.g. https://developmentseed.org/lonboard/latest/), @apache (e.g. https://sedona.apache.org/sedonadb/latest/) and @uber (e.g. https://github.com/uber/h3)
——
To the community, your suggestions drive our roadmap – please share your ideas in the issues tracker!
Cheers!
🎉 First Public Release – Urban Mapper is on PyPI!
Hi folks!
We are pleased to announce that UrbanMapper is now available in its first public release under the tag 0.1.2 🎉
Note
Why not 0.1.0 ? Bear with us! We had to do very slight patches from 0.1.0 such as documentation improvement, PyPI Readme adjustments, and stuff like this.
📽️ Urban Mapper is built on @openstreetmap through OSMNX (By @gboeing and team), @Tile2Net (By @Mary-h86 and team), features-enhanced by @geojupyter through @JupyterGIS (By @QuantStack maintained by @mfisher87 and teams @SchmidtDSE), by @huggingface through @datasets, by @skrub-data through @Skrub (By @probabl-ai and team), among many other such cool tools and features! But really, what does it do? 👇👇👇
💡 Urban Mapper presents an innovative GIS-based library for deterministic (as of now) urban analysis, aimed at streamlining the process of collecting urban layers from around the globe and facilitating the downloading of spatial datasets from the web and all open data from major cities worldwide. And what's next? The goal is to then allow, with ease of use, to spatially join these datasets, compute statistics, and apply them to your urban layer, resulting in a comprehensive urban analysis as a geo-dataframe. Sounds easy, right? This is thanks to the introduction of an urban pipeline, akin to a Scikit-Learn pipeline, enabling users to sequentially apply various urban analysis steps together in a compact format. From utilising transformers for missing geo-coordinates and filtering techniques to employing enrichers for statistical insights, the urban pipeline allows for the saving of urban analyses in a manner similar to saving a trained sklearn pipeline-based model. It promotes reproducibility, ease of loading, modification, and the ability to add or remove components from a given urban analysis at any time, without having to read tweaked-based and manual code.
There are numerous additional features that, while not central to Urban Mapper, warrant thoughtful consideration. For instance, after conducting an urban analysis with the urban pipeline introduced above, why not export and import it into JupyterGIS for a collaborative real-time session with urban planners in Jupyter? Another one is related to the big LLM trends; why not consider utilising LLM to generate your own analysis urban pipeline based on a specific urban layer and dataset of interest? This is all made possible by @Ell from @MadcowD. Last one? All right! Another one may allow you to avoid having to have locally available spatial datasets to play with and instead, for instance, simply request an urban layer of interest and a dataset available in the HuggingFace datasets hubs that we download for you. This is all made possible by HuggingFace datasets from @huggingface.
More is coming; explore our GitHub issue and read through our README and our documentation!
Please share your suggestions! Without external suggestions, how can we be sure we help some GIS workflows out there? 👀 So far, a few have already been made by external contributors to @VIDA-NYU, where this project originated. For example:
-
@hunarjain09 from @facebook suggested enhancing the presentation of examples in the Getting Started section by possibly creating a new tab for examples. This would allow users to easily navigate through all the example notebooks we have produced directly from the documentation (i.e. the notebooks would be already run through, allowing anyone to simply look at the output and navigate the various maps Urban Mapper produces). For further details, refer to #53. Very initial suggestion goes to @mfisher87.
-
@MohanadDiab from @POLIMI (Off. Website) & the GEO-GIS Lab has agreed to try to find one of their Master's students to assist in integrating Mohana's LangRS as a new urban layer's primitive. For more details, see #52.
From within the lab @VIDA-NYU, many things are being cooked on by @soniacq and others! Stay tuned!
🫵
https://pypi.org/project/urban-mapper/
[v0.1.2] - 2025 – May – 22nd - First Public Release
Added
- HuggingFace Datasets integration with Urban Mapper, amazing work by @soniacq – #45, #49
- LLM-generator of Urban Pipeline – #37
- Custom Urban Layer addition from dataframe – #36
- Copyright Update From @simonprovost to @nyu, requested by @ctsilva – #34
- Pipeline Viz. enhancement with progress-bar for long-pipeline execution, kindly proposed by @fabiofelix – #33
- Documentation & Readme – #29, #30, #31, #32, #39, #43 (Work by @ctsilva & @simonprovost), #46, #50, #57 (work by @soniacq)
- Enricher enhancement with support for reporting indices used while augmenting datasets to urban layers, requested by @soniacq's work – #25
- Pipeline Better Integration from Joblib to Dill, requested by @fabiofelix's work – #24
- JupyterGIS integration & support, thanks to @mfisher87 for great support with such integr. – #22, #25
- Enricher Module Enhancement with custom lambda function, requested by @fabiofelix's work – #21
- Continuous Integration with compilation verification – #20
- Introduction of numerous Examples & Study Cases – #14, #16, #19, #25, #50
- Introduction of Chaining-Based API style – #12 #13
- Integration of @VIDA-NYU Auctus By @soniacq @remram44 @julianafreire and team via Auctus Search – #2, #20
- Introduction of
Loader,Urban layer,Geo Imputer,Geo Filter,Pipeline&Visualiserinternal modules from a long discussion over a whiteboard with @joaorulff where the library initiated – Commits.
Note, no tags' release note before 0.1.2 will ever be available.