{"id":24456152,"url":"https://github.com/arthurdjn/noiseplanet","last_synced_at":"2026-01-02T16:04:07.575Z","repository":{"id":40343859,"uuid":"230904044","full_name":"arthurdjn/noiseplanet","owner":"arthurdjn","description":"A Python package for Map Matching and Mapping. Research work for Noise Planet center.","archived":false,"fork":false,"pushed_at":"2022-09-29T14:59:36.000Z","size":207550,"stargazers_count":50,"open_issues_count":12,"forks_count":13,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-21T02:15:23.746Z","etag":null,"topics":["geojson","geojson-tracks","leaflet","map-matching","mapping","osm","osmnx"],"latest_commit_sha":null,"homepage":"http://noise-planet.org/","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arthurdjn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-12-30T11:30:02.000Z","updated_at":"2024-12-24T08:04:17.000Z","dependencies_parsed_at":"2023-01-17T18:46:03.260Z","dependency_job_id":null,"html_url":"https://github.com/arthurdjn/noiseplanet","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthurdjn%2Fnoiseplanet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthurdjn%2Fnoiseplanet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthurdjn%2Fnoiseplanet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthurdjn%2Fnoiseplanet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arthurdjn","download_url":"https://codeload.github.com/arthurdjn/noiseplanet/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243544665,"owners_count":20308168,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["geojson","geojson-tracks","leaflet","map-matching","mapping","osm","osmnx"],"created_at":"2025-01-21T02:15:28.892Z","updated_at":"2026-01-02T16:04:07.567Z","avatar_url":"https://github.com/arthurdjn.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# :warning: This package is no longer maintained due to lack of time. \n\u003e This package was tested in 2019 and may be deprecated depending on your environment.\n\n\n# noiseplanet\n\n[![GitHub Pipenv locked Python version](https://img.shields.io/readthedocs/noiseplanet/latest)](http://noiseplanet.readthedocs.io/en/latest/index.html)\n[![website](https://img.shields.io/badge/platform-up-green.svg)](http://noise-planet.org/)\n[![website](https://img.shields.io/badge/blog-up-green.svg)](https://arthurdujardin.com/projects/noiseplanet.html)\n\n**Python for map matching and mapping geojson tracks**\n\n\n\nThis library is a project within the research center *UMR-AE/CNRS*, working on NoisePlanet for noise mapping.\nMade in collaboration with the *École Nationale des Sciences Géographiques*.\n\n**Citation :** Dujardin, A., Mermet, S. (2020). État de l’art et suggestions pour la cartographie des données acoustiques mobiles. *Projet de recherche*.\n\n## Overview\n\n**noiseplanet** is a Python package that lets you extract, correct, and plot geojson data on Leaflet maps.\nThe main focus of this package is on map matching, and uses Open Street Map network as reference.\nThe geojson track should contains a list of GPS points that you want to match on the street graph. The only informations used for the map matching are the points coordinates.\n\n\u003cp align=\"center\"\u003e\n  \u003cb\u003eOSM network\u003c/b\u003e\u003cbr\u003e\n  \u003cimg src=\"img/osm.jpg\"\u003e\n  \u003cbr\u003e\n\u003c/p\u003e\n\n\nThe report and poster made for this project can be found [here](pdf/report/PIRRAP_Dujardin_Mermet.pdf) and [here](pdf/report/PIRPOST_Dujardin_Mermet.pdf).\n\n\n## Installing\n### Dependencies\nThis module use several packages :\n- **numpy**,\n- **pandas**,\n- **json**,\n- **osmnx**,\n- **leuvenmapmatching**, *KU Leuven - DTAI Research Group, Sirris - Elucidata Group*.\n\nTo install, clone the repository, and in the *noiseplanet* folder execute the `setup.py` :\n```\ngit clone https://github.com/arthurdjn/noiseplanet\ncd noiseplanet\npip install .\n```\n\n### Optional dependencies\n\nFor plotting and interface, the following packages are used :\n- **matplotlib**,\n- **folium**,\n- **sqlite3**.\n\nNote that these packages are optional if you don't want to visualize the resulting maps. *SQLite3* is used to stock all the informations of a geojson tracks or polygon into an SQL database.\n\n\n### Structure\n\n*noiseplanet* is composed by internal sub-packages:\n- **matching** lets you correct tracks and match it to the *Open Street Map* network,\n- **utils** mainly handles conversion from geojson, metadata etc. to *DataFrame*,\n- **ui** is used to generate *Leaflet* maps,\n- **io** handles reading and writing files,\n- **db** lets you access a *SQLite3* database.\n\n## Usage\n\nThis project was created to provide new ways of mapping for the *UMR-AE/CNRS* team. \n\n### Map Matching\n\nThe **noiseplanet** package provides different tools for matching a track to the *Open Street Map* network.\n- matching to the **nearest** edge,\n- **hmm** based matching.\n\nHowever, the matching algorithm used within NoisePlanet is taken from **Hidden Markov Models**, as the matching is more precised.\n\n\n\u003cp align=\"center\"\u003e\n  \u003cb\u003eHMM based algorithm used\u003c/b\u003e\u003cbr\u003e\n  \u003cimg src=\"img/hmm.PNG\"\u003e\n\u003c/p\u003e\n\n\n\nTo match a track, composed by latitudes and longitudes, use :\n```python\nimport numpy as np\nimport osmnx as ox\nfrom noiseplanet.matcher import matching\n\ntrack = np.array([[45.7584882 ,  4.83585996],\n                  [45.75848068,  4.83586747],\n                  [45.75849549,  4.83585205],\n                  [45.75849134,  4.83584647],\n                  [45.75848135,  4.8358245 ],\n                  # ...\n                  [45.75846756,  4.83580848],\n                  [45.75844998,  4.83580936],\n                  [45.7584067 ,  4.83580086],\n                  [45.7584067 ,  4.83580086],\n                  [45.75839346,  4.83579883]])\n\ngraph = matching.model.graph_from_track(track)\n\ntrack_coor, route_corr, edgeid, stats = matching.match(graph, track, method='hmm')\n```\n\nAnd visualize the results :\n\n```python\nfrom noiseplanet.ui.foroute import plot_html\n\n# Plot the graph\nplot_html(track, track_corr=track_corr, route_corr=route_corr,\n          proj=True, show_graph=True)\n```\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"img/track_hmm.png\"\u003e\n\u003c/p\u003e\n\n\nYou can change the matching method.\nFor example, the above method uses **Hidden Markov Models**, and is the best way to match a track on the OSM (see the report for more details).\nHowever, you can use a naive method to match the track on the nearest road :\n\n\n```python\ntrack_coor, route_corr, edgeid, stats = matching.match(graph, track, method='nearest')\n```\n\nAnd visualize the results :\n\n```python\nfrom noiseplanet.ui import plot_html\n\n# Plot the graph\nplot_html(track, track_corr=track_corr, route_corr=route_corr,\n          proj=True, show_graph=True)\n```\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"img/track_nearest.png\"\u003e\n\u003c/p\u003e\n\n\n\nCheck the read the docs documentation for more depth in the functions used.\nYou can also see the report published for this project [here](pdf/report/PIRRAP_Dujardin_Mermet.pdf) : Dujardin, A., Mermet, S. (2020). État de l’art et suggestions pour la cartographie des données acoustiques mobiles. *Projet de recherche*.\n\n\n## Visualization\n\nThe map matching algorithm was used to match more than 500.000 tracks from Lyon.\nTherefore, the noise can be represented on roads and sidewalks, more relevant at larger scale.\n\n\u003cp align=\"center\"\u003e\n  \u003cb\u003eBefore : heat map and hexagonal grid\u003c/b\u003e\u003cbr\u003e\n  \u003cimg src=\"img/representation_chaleur.jpg\" width=\"48%\"\u003e\n  \u003cimg src=\"img/représentation_hexagones.jpg\" width=\"48%\"\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003cb\u003eAfter : points and roads\u003c/b\u003e\u003cbr\u003e\n  \u003cimg src=\"img/representation_ponctuelle.jpg\" width=\"48%\"\u003e\n  \u003cimg src=\"img/représentation_tronçons.jpg\" width=\"48%\"\u003e\n\u003c/p\u003e\n\n\n## Authors\n\n- **Arthur Dujardin**\n- **Samuel Mermet**\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farthurdjn%2Fnoiseplanet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farthurdjn%2Fnoiseplanet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farthurdjn%2Fnoiseplanet/lists"}