{"id":28298944,"url":"https://github.com/ullingerc/spatial-search","last_synced_at":"2025-08-03T06:06:01.960Z","repository":{"id":271575620,"uuid":"910782480","full_name":"ullingerc/spatial-search","owner":"ullingerc","description":"\"Efficient Spatial Search for the QLever SPARQL Engine\" - Materials for the Thesis","archived":false,"fork":false,"pushed_at":"2025-01-12T09:51:18.000Z","size":213,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-30T06:18:44.923Z","etag":null,"topics":["csv","gtfs","kml","nearest-neighbor-search","qlever","rdf","sparql","spatial"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ullingerc.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-01-01T12:11:41.000Z","updated_at":"2025-01-12T09:51:22.000Z","dependencies_parsed_at":"2025-01-08T16:29:20.852Z","dependency_job_id":"1c79a89d-8abe-4dcd-b4fc-474d6858ebae","html_url":"https://github.com/ullingerc/spatial-search","commit_stats":null,"previous_names":["ullingerc/spatial-search"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ullingerc/spatial-search","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ullingerc%2Fspatial-search","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ullingerc%2Fspatial-search/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ullingerc%2Fspatial-search/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ullingerc%2Fspatial-search/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ullingerc","download_url":"https://codeload.github.com/ullingerc/spatial-search/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ullingerc%2Fspatial-search/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268500608,"owners_count":24260163,"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","status":"online","status_checked_at":"2025-08-03T02:00:12.545Z","response_time":2577,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["csv","gtfs","kml","nearest-neighbor-search","qlever","rdf","sparql","spatial"],"created_at":"2025-05-23T06:15:27.505Z","updated_at":"2025-08-03T06:06:01.952Z","avatar_url":"https://github.com/ullingerc.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Efficient Spatial Search for the QLever SPARQL Engine\n\nThis repository contains all programs for the workflow presented in the thesis [\"Efficient Spatial Search for the QLever SPARQL Engine\" (PDF)](https://ullinger.info/bachelor-thesis/Efficient_Spatial_Search_for_the_QLever_SPARQL_Engine.pdf).\n\n## Abstract\n\nWe present an end-to-end workflow for efficiently performing geographic searches for nearest neighbors with the QLever SPARQL engine. Our solution significantly reduces the time and the users' effort required to combine and query spatial data from multiple sources.\n\nQLever allows working with points in the standardized *Well-Known Text* format, which it now stores efficiently.\nSearching for geographically close points in data sets containing hundreds of millions of points becomes a matter of seconds using QLever's new spatial search capabilities. A fast algorithm based on a spatial index is presented as well as a proof of concept baseline algorithm. The spatial search is carefully integrated into the SPARQL syntax.\n\nWe introduce programs for the conversion of data from multiple formats (*Keyhole Markup Language*, *Comma-Separated Values* and *General Transit Feed Specification*) to RDF. Additionally, a new program allows users to construct complex spatial queries for QLever with a graphical user interface.\n\nThe retrieval of data, which would otherwise require working with many different data sets individually, is now possible in a single SPARQL query. We demonstrate the usability of our workflow using a current research question from political science.\n\nFurthermore, we show that our efficient spatial search implementation in QLever surpasses the query performance of the popular PostgreSQL system by orders of magnitude for large inputs. Regarding all benchmarks, our implementation shows more stable running times.\n\n\n## Usage\n\nAll contributions to the QLever SPARQL engine can be used directly via [QLever's official source code](https://github.com/ad-freiburg/qlever) or the [QLever docker image](https://hub.docker.com/r/adfreiburg/qlever). The spatial search feature is described on the [QLever Wiki](https://github.com/ad-freiburg/qlever/wiki/GeoSPARQL-support-in-QLever).\n\nThe new programs introduced in the thesis can be used as follows:\n\n```bash\n# Clone the repository and enter its directory:\ngit clone https://github.com/ullingerc/spatial-search.git\ncd spatial-search\n# Build and start the container image:\npodman build -t spatial .\npodman run --rm -it -v ./output:/output:rw -p 7990:7990 spatial\n# Inside the container, get more information:\nmake help\n```\n\nThe container provides the following programs:\n\n- Conversion of External Data Sets to RDF Turtle\n  - Keyhole Markup Language (KML) - `kml2rdf.py`\n  - Comma-separated Values (CSV) - `csv2rdf.py`\n  - General Transit Feed Specification (GTFS) - `gtfs2rdf.py`\n  - Election Data - `election2rdf.py`\n- Generation of Spatial SPARQL queries for QLever\n  - Command-Line Interface and Graphical User Interface - `compose_spatial.py`\n- Reproduction of the Thesis' Evaluation and Case Study\n  - ability to export `run_reproduction` standalone program (to be run on the host system)\n\nThe Python programs do not have any external dependencies. They can also be used standalone without a container after cloning the repository. You may get more information using the `--help` option of each program for CLI usage and in the docstrings for library usage.\n\nUnit tests, `coverage.py` and the `flake8` style checker are included in the container. For type checking, `pyright` is used. It needs to be installed manually in the container if required.\n\n## License\n\nAll source code and documentation in this repository is licensed under the GNU General Public License version 3 or later. For more details see the `LICENSE` file.\n\nIf you use any of the code or results in published works, please cite *Christoph Ullinger, \"Efficient Spatial Search for the QLever SPARQL Engine\". 2025. \u003chttps://ullinger.info/spatial-search-2025\u003e*.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fullingerc%2Fspatial-search","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fullingerc%2Fspatial-search","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fullingerc%2Fspatial-search/lists"}