Showing preview only (5,941K chars total). Download the full file or copy to clipboard to get everything.
Repository: twain47/Nominatim
Branch: master
Commit: fd68dd4ee63f
Files: 725
Total size: 5.4 MB
Directory structure:
gitextract_d41547bl/
├── .codespellrc
├── .flake8
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── config.yml
│ │ ├── feature_request.md
│ │ ├── report-issues-with-search-results.md
│ │ └── report-problems-with-the-software.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── actions/
│ │ ├── build-nominatim/
│ │ │ └── action.yml
│ │ ├── setup-postgresql/
│ │ │ └── action.yml
│ │ └── setup-postgresql-windows/
│ │ └── action.yml
│ └── workflows/
│ └── ci-tests.yml
├── .gitignore
├── .gitmodules
├── .mypy.ini
├── AUTHORS
├── CONTRIBUTING.md
├── COPYING
├── ChangeLog
├── LICENSES/
│ ├── Apache-2.0.txt
│ └── GPL-2.0-only.txt
├── Makefile
├── README.md
├── SECURITY.md
├── VAGRANT.md
├── Vagrantfile
├── data/
│ └── words.sql
├── docs/
│ ├── admin/
│ │ ├── Advanced-Installations.md
│ │ ├── Deployment-Python.md
│ │ ├── Faq.md
│ │ ├── Import.md
│ │ ├── Installation.md
│ │ ├── Maintenance.md
│ │ ├── Migration.md
│ │ ├── Setup-Nominatim-UI.md
│ │ └── Update.md
│ ├── api/
│ │ ├── Details.md
│ │ ├── Faq.md
│ │ ├── Lookup.md
│ │ ├── Output.md
│ │ ├── Overview.md
│ │ ├── Reverse.md
│ │ ├── Search.md
│ │ └── Status.md
│ ├── customize/
│ │ ├── Country-Settings.md
│ │ ├── Import-Styles.md
│ │ ├── Importance.md
│ │ ├── Overview.md
│ │ ├── Postcodes.md
│ │ ├── Ranking.md
│ │ ├── Result-Formatting.md
│ │ ├── SQLite.md
│ │ ├── Settings.md
│ │ ├── Special-Phrases.md
│ │ ├── Tiger.md
│ │ └── Tokenizers.md
│ ├── develop/
│ │ ├── Database-Layout.md
│ │ ├── Development-Environment.md
│ │ ├── ICU-Tokenizer-Modules.md
│ │ ├── Indexing.md
│ │ ├── Testing.md
│ │ ├── Tokenizers.md
│ │ ├── address-tables.plantuml
│ │ ├── data-sources.md
│ │ ├── osm2pgsql-tables.plantuml
│ │ ├── overview.md
│ │ ├── parenting-flow.plantuml
│ │ └── search-tables.plantuml
│ ├── extra.css
│ ├── index.md
│ ├── library/
│ │ ├── Configuration.md
│ │ ├── Getting-Started.md
│ │ ├── Input-Parameter-Types.md
│ │ ├── Low-Level-DB-Access.md
│ │ ├── NominatimAPI.md
│ │ └── Result-Handling.md
│ ├── mk_install_instructions.py
│ └── styles.css
├── lib-lua/
│ ├── flex-base.lua
│ ├── import-address.lua
│ ├── import-admin.lua
│ ├── import-extratags.lua
│ ├── import-full.lua
│ ├── import-street.lua
│ ├── taginfo.lua
│ └── themes/
│ └── nominatim/
│ ├── init.lua
│ ├── presets.lua
│ └── topics/
│ ├── address.lua
│ ├── admin.lua
│ ├── full.lua
│ └── street.lua
├── lib-sql/
│ ├── functions/
│ │ ├── associated_street_triggers.sql
│ │ ├── importance.sql
│ │ ├── interpolation.sql
│ │ ├── partition-functions.sql
│ │ ├── place_triggers.sql
│ │ ├── placex_triggers.sql
│ │ ├── postcode_triggers.sql
│ │ ├── ranking.sql
│ │ ├── updates.sql
│ │ └── utils.sql
│ ├── functions.sql
│ ├── grants.sql
│ ├── indices.sql
│ ├── partition-tables.src.sql
│ ├── postcode_tables.sql
│ ├── table-triggers.sql
│ ├── tables/
│ │ ├── addressline.sql
│ │ ├── entrance.sql
│ │ ├── import_reports.sql
│ │ ├── importance_tables.sql
│ │ ├── interpolation.sql
│ │ ├── location_area.sql
│ │ ├── nominatim_properties.sql
│ │ ├── placex.sql
│ │ ├── postcodes.sql
│ │ ├── search_name.sql
│ │ ├── status.sql
│ │ └── tiger.sql
│ ├── tables.sql
│ ├── tiger_import_finish.sql
│ ├── tiger_import_start.sql
│ └── tokenizer/
│ └── icu_tokenizer.sql
├── man/
│ ├── create-manpage.py
│ └── nominatim.1
├── mkdocs.yml
├── munin/
│ ├── nominatim_importlag
│ ├── nominatim_query_speed
│ └── nominatim_requests
├── nominatim-cli.py
├── packaging/
│ ├── nominatim-api/
│ │ ├── COPYING
│ │ ├── README.md
│ │ ├── extra_src/
│ │ │ └── paths.py
│ │ └── pyproject.toml
│ └── nominatim-db/
│ ├── COPYING
│ ├── README.md
│ ├── extra_src/
│ │ └── nominatim_db/
│ │ └── paths.py
│ ├── pyproject.toml
│ └── scripts/
│ └── nominatim
├── settings/
│ ├── address-levels.json
│ ├── country-names/
│ │ ├── ad.yaml
│ │ ├── ae.yaml
│ │ ├── af.yaml
│ │ ├── ag.yaml
│ │ ├── ai.yaml
│ │ ├── al.yaml
│ │ ├── am.yaml
│ │ ├── ao.yaml
│ │ ├── ar.yaml
│ │ ├── at.yaml
│ │ ├── au.yaml
│ │ ├── az.yaml
│ │ ├── ba.yaml
│ │ ├── bb.yaml
│ │ ├── bd.yaml
│ │ ├── be.yaml
│ │ ├── bf.yaml
│ │ ├── bg.yaml
│ │ ├── bh.yaml
│ │ ├── bi.yaml
│ │ ├── bj.yaml
│ │ ├── bm.yaml
│ │ ├── bn.yaml
│ │ ├── bo.yaml
│ │ ├── br.yaml
│ │ ├── bs.yaml
│ │ ├── bt.yaml
│ │ ├── bw.yaml
│ │ ├── by.yaml
│ │ ├── bz.yaml
│ │ ├── ca.yaml
│ │ ├── cd.yaml
│ │ ├── cf.yaml
│ │ ├── cg.yaml
│ │ ├── ch.yaml
│ │ ├── ci.yaml
│ │ ├── ck.yaml
│ │ ├── cl.yaml
│ │ ├── cm.yaml
│ │ ├── cn.yaml
│ │ ├── co.yaml
│ │ ├── cr.yaml
│ │ ├── cu.yaml
│ │ ├── cv.yaml
│ │ ├── cy.yaml
│ │ ├── cz.yaml
│ │ ├── de.yaml
│ │ ├── dj.yaml
│ │ ├── dk.yaml
│ │ ├── dm.yaml
│ │ ├── do.yaml
│ │ ├── dz.yaml
│ │ ├── ec.yaml
│ │ ├── ee.yaml
│ │ ├── eg.yaml
│ │ ├── eh.yaml
│ │ ├── er.yaml
│ │ ├── es.yaml
│ │ ├── et.yaml
│ │ ├── fi.yaml
│ │ ├── fj.yaml
│ │ ├── fk.yaml
│ │ ├── fm.yaml
│ │ ├── fo.yaml
│ │ ├── fr.yaml
│ │ ├── ga.yaml
│ │ ├── gb.yaml
│ │ ├── gd.yaml
│ │ ├── ge.yaml
│ │ ├── gg.yaml
│ │ ├── gh.yaml
│ │ ├── gi.yaml
│ │ ├── gl.yaml
│ │ ├── gm.yaml
│ │ ├── gn.yaml
│ │ ├── gq.yaml
│ │ ├── gr.yaml
│ │ ├── gs.yaml
│ │ ├── gt.yaml
│ │ ├── gw.yaml
│ │ ├── gy.yaml
│ │ ├── hn.yaml
│ │ ├── hr.yaml
│ │ ├── ht.yaml
│ │ ├── hu.yaml
│ │ ├── id.yaml
│ │ ├── ie.yaml
│ │ ├── il.yaml
│ │ ├── im.yaml
│ │ ├── in.yaml
│ │ ├── io.yaml
│ │ ├── iq.yaml
│ │ ├── ir.yaml
│ │ ├── is.yaml
│ │ ├── it.yaml
│ │ ├── je.yaml
│ │ ├── jm.yaml
│ │ ├── jo.yaml
│ │ ├── jp.yaml
│ │ ├── ke.yaml
│ │ ├── kg.yaml
│ │ ├── kh.yaml
│ │ ├── ki.yaml
│ │ ├── km.yaml
│ │ ├── kn.yaml
│ │ ├── kp.yaml
│ │ ├── kr.yaml
│ │ ├── kw.yaml
│ │ ├── ky.yaml
│ │ ├── kz.yaml
│ │ ├── la.yaml
│ │ ├── lb.yaml
│ │ ├── lc.yaml
│ │ ├── li.yaml
│ │ ├── lk.yaml
│ │ ├── lr.yaml
│ │ ├── ls.yaml
│ │ ├── lt.yaml
│ │ ├── lu.yaml
│ │ ├── lv.yaml
│ │ ├── ly.yaml
│ │ ├── ma.yaml
│ │ ├── mc.yaml
│ │ ├── md.yaml
│ │ ├── me.yaml
│ │ ├── mg.yaml
│ │ ├── mh.yaml
│ │ ├── mk.yaml
│ │ ├── ml.yaml
│ │ ├── mm.yaml
│ │ ├── mn.yaml
│ │ ├── mr.yaml
│ │ ├── ms.yaml
│ │ ├── mt.yaml
│ │ ├── mu.yaml
│ │ ├── mv.yaml
│ │ ├── mw.yaml
│ │ ├── mx.yaml
│ │ ├── my.yaml
│ │ ├── mz.yaml
│ │ ├── na.yaml
│ │ ├── ne.yaml
│ │ ├── ng.yaml
│ │ ├── ni.yaml
│ │ ├── nl.yaml
│ │ ├── no.yaml
│ │ ├── np.yaml
│ │ ├── nr.yaml
│ │ ├── nu.yaml
│ │ ├── nz.yaml
│ │ ├── om.yaml
│ │ ├── pa.yaml
│ │ ├── pe.yaml
│ │ ├── pg.yaml
│ │ ├── ph.yaml
│ │ ├── pk.yaml
│ │ ├── pl.yaml
│ │ ├── pn.yaml
│ │ ├── ps.yaml
│ │ ├── pt.yaml
│ │ ├── pw.yaml
│ │ ├── py.yaml
│ │ ├── qa.yaml
│ │ ├── ro.yaml
│ │ ├── rs.yaml
│ │ ├── ru.yaml
│ │ ├── rw.yaml
│ │ ├── sa.yaml
│ │ ├── sb.yaml
│ │ ├── sc.yaml
│ │ ├── sd.yaml
│ │ ├── se.yaml
│ │ ├── sg.yaml
│ │ ├── sh.yaml
│ │ ├── si.yaml
│ │ ├── sk.yaml
│ │ ├── sl.yaml
│ │ ├── sm.yaml
│ │ ├── sn.yaml
│ │ ├── so.yaml
│ │ ├── sr.yaml
│ │ ├── ss.yaml
│ │ ├── st.yaml
│ │ ├── sv.yaml
│ │ ├── sy.yaml
│ │ ├── sz.yaml
│ │ ├── tc.yaml
│ │ ├── td.yaml
│ │ ├── tg.yaml
│ │ ├── th.yaml
│ │ ├── tj.yaml
│ │ ├── tk.yaml
│ │ ├── tl.yaml
│ │ ├── tm.yaml
│ │ ├── tn.yaml
│ │ ├── to.yaml
│ │ ├── tr.yaml
│ │ ├── tt.yaml
│ │ ├── tv.yaml
│ │ ├── tw.yaml
│ │ ├── tz.yaml
│ │ ├── ua.yaml
│ │ ├── ug.yaml
│ │ ├── us.yaml
│ │ ├── uy.yaml
│ │ ├── uz.yaml
│ │ ├── va.yaml
│ │ ├── vc.yaml
│ │ ├── ve.yaml
│ │ ├── vg.yaml
│ │ ├── vn.yaml
│ │ ├── vu.yaml
│ │ ├── ws.yaml
│ │ ├── xk.yaml
│ │ ├── ye.yaml
│ │ ├── za.yaml
│ │ ├── zm.yaml
│ │ └── zw.yaml
│ ├── country_settings.yaml
│ ├── env.defaults
│ ├── icu-rules/
│ │ ├── extended-unicode-to-asccii.yaml
│ │ ├── unicode-digits-to-decimal.yaml
│ │ ├── variants-bg.yaml
│ │ ├── variants-ca.yaml
│ │ ├── variants-cs.yaml
│ │ ├── variants-da.yaml
│ │ ├── variants-de.yaml
│ │ ├── variants-el.yaml
│ │ ├── variants-en.yaml
│ │ ├── variants-es.yaml
│ │ ├── variants-et.yaml
│ │ ├── variants-eu.yaml
│ │ ├── variants-fi.yaml
│ │ ├── variants-fr.yaml
│ │ ├── variants-gl.yaml
│ │ ├── variants-hu.yaml
│ │ ├── variants-it.yaml
│ │ ├── variants-mg.yaml
│ │ ├── variants-ms.yaml
│ │ ├── variants-nl.yaml
│ │ ├── variants-no.yaml
│ │ ├── variants-pl.yaml
│ │ ├── variants-pt.yaml
│ │ ├── variants-ro.yaml
│ │ ├── variants-ru.yaml
│ │ ├── variants-sk.yaml
│ │ ├── variants-sl.yaml
│ │ ├── variants-sv.yaml
│ │ ├── variants-tr.yaml
│ │ ├── variants-uk.yaml
│ │ └── variants-vi.yaml
│ ├── icu_tokenizer.yaml
│ └── phrase-settings.json
├── src/
│ ├── nominatim_api/
│ │ ├── __init__.py
│ │ ├── config.py
│ │ ├── connection.py
│ │ ├── core.py
│ │ ├── errors.py
│ │ ├── localization.py
│ │ ├── logging.py
│ │ ├── lookup.py
│ │ ├── py.typed
│ │ ├── query_preprocessing/
│ │ │ ├── __init__.py
│ │ │ ├── base.py
│ │ │ ├── config.py
│ │ │ ├── normalize.py
│ │ │ ├── regex_replace.py
│ │ │ └── split_japanese_phrases.py
│ │ ├── result_formatting.py
│ │ ├── results.py
│ │ ├── reverse.py
│ │ ├── search/
│ │ │ ├── __init__.py
│ │ │ ├── db_search_builder.py
│ │ │ ├── db_search_fields.py
│ │ │ ├── db_search_lookups.py
│ │ │ ├── db_searches/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── address_search.py
│ │ │ │ ├── base.py
│ │ │ │ ├── country_search.py
│ │ │ │ ├── near_search.py
│ │ │ │ ├── place_search.py
│ │ │ │ ├── poi_search.py
│ │ │ │ └── postcode_search.py
│ │ │ ├── geocoder.py
│ │ │ ├── icu_tokenizer.py
│ │ │ ├── postcode_parser.py
│ │ │ ├── query.py
│ │ │ ├── query_analyzer_factory.py
│ │ │ └── token_assignment.py
│ │ ├── server/
│ │ │ ├── __init__.py
│ │ │ ├── asgi_adaptor.py
│ │ │ ├── content_types.py
│ │ │ ├── falcon/
│ │ │ │ ├── __init__.py
│ │ │ │ └── server.py
│ │ │ └── starlette/
│ │ │ ├── __init__.py
│ │ │ └── server.py
│ │ ├── sql/
│ │ │ ├── __init__.py
│ │ │ ├── async_core_library.py
│ │ │ ├── sqlalchemy_functions.py
│ │ │ ├── sqlalchemy_schema.py
│ │ │ ├── sqlalchemy_types/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── geometry.py
│ │ │ │ ├── int_array.py
│ │ │ │ ├── json.py
│ │ │ │ └── key_value.py
│ │ │ └── sqlite_functions.py
│ │ ├── status.py
│ │ ├── timeout.py
│ │ ├── types.py
│ │ ├── typing.py
│ │ ├── utils/
│ │ │ ├── __init__.py
│ │ │ └── json_writer.py
│ │ ├── v1/
│ │ │ ├── __init__.py
│ │ │ ├── classtypes.py
│ │ │ ├── format.py
│ │ │ ├── format_json.py
│ │ │ ├── format_xml.py
│ │ │ ├── helpers.py
│ │ │ └── server_glue.py
│ │ └── version.py
│ └── nominatim_db/
│ ├── __init__.py
│ ├── cli.py
│ ├── clicmd/
│ │ ├── __init__.py
│ │ ├── add_data.py
│ │ ├── admin.py
│ │ ├── api.py
│ │ ├── args.py
│ │ ├── convert.py
│ │ ├── export.py
│ │ ├── freeze.py
│ │ ├── index.py
│ │ ├── refresh.py
│ │ ├── replication.py
│ │ ├── setup.py
│ │ └── special_phrases.py
│ ├── config.py
│ ├── data/
│ │ ├── __init__.py
│ │ ├── country_info.py
│ │ ├── place_info.py
│ │ ├── place_name.py
│ │ └── postcode_format.py
│ ├── db/
│ │ ├── __init__.py
│ │ ├── connection.py
│ │ ├── properties.py
│ │ ├── query_pool.py
│ │ ├── sql_preprocessor.py
│ │ ├── status.py
│ │ └── utils.py
│ ├── errors.py
│ ├── indexer/
│ │ ├── __init__.py
│ │ ├── indexer.py
│ │ ├── progress.py
│ │ └── runners.py
│ ├── paths.py
│ ├── tokenizer/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── factory.py
│ │ ├── icu_rule_loader.py
│ │ ├── icu_token_analysis.py
│ │ ├── icu_tokenizer.py
│ │ ├── place_sanitizer.py
│ │ ├── sanitizers/
│ │ │ ├── __init__.py
│ │ │ ├── base.py
│ │ │ ├── clean_housenumbers.py
│ │ │ ├── clean_postcodes.py
│ │ │ ├── clean_tiger_tags.py
│ │ │ ├── config.py
│ │ │ ├── delete_tags.py
│ │ │ ├── split_name_list.py
│ │ │ ├── strip_brace_terms.py
│ │ │ ├── tag_analyzer_by_language.py
│ │ │ └── tag_japanese.py
│ │ └── token_analysis/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── config_variants.py
│ │ ├── generic.py
│ │ ├── generic_mutation.py
│ │ ├── housenumbers.py
│ │ ├── postcodes.py
│ │ └── simple_trie.py
│ ├── tools/
│ │ ├── __init__.py
│ │ ├── add_osm_data.py
│ │ ├── admin.py
│ │ ├── check_database.py
│ │ ├── collect_os_info.py
│ │ ├── convert_sqlite.py
│ │ ├── database_import.py
│ │ ├── exec_utils.py
│ │ ├── freeze.py
│ │ ├── migration.py
│ │ ├── postcodes.py
│ │ ├── refresh.py
│ │ ├── replication.py
│ │ ├── special_phrases/
│ │ │ ├── __init__.py
│ │ │ ├── importer_statistics.py
│ │ │ ├── sp_csv_loader.py
│ │ │ ├── sp_importer.py
│ │ │ ├── sp_wiki_loader.py
│ │ │ └── special_phrase.py
│ │ └── tiger_data.py
│ ├── typing.py
│ ├── utils/
│ │ ├── __init__.py
│ │ ├── centroid.py
│ │ └── url_utils.py
│ └── version.py
├── test/
│ ├── bdd/
│ │ ├── conftest.py
│ │ ├── features/
│ │ │ ├── api/
│ │ │ │ ├── details/
│ │ │ │ │ ├── language.feature
│ │ │ │ │ ├── params.feature
│ │ │ │ │ └── simple.feature
│ │ │ │ ├── lookup/
│ │ │ │ │ └── simple.feature
│ │ │ │ ├── reverse/
│ │ │ │ │ ├── geometry.feature
│ │ │ │ │ ├── language.feature
│ │ │ │ │ ├── layers.feature
│ │ │ │ │ ├── queries.feature
│ │ │ │ │ ├── v1_geocodejson.feature
│ │ │ │ │ ├── v1_geojson.feature
│ │ │ │ │ ├── v1_json.feature
│ │ │ │ │ ├── v1_params.feature
│ │ │ │ │ └── v1_xml.feature
│ │ │ │ ├── search/
│ │ │ │ │ ├── language.feature
│ │ │ │ │ ├── params.feature
│ │ │ │ │ ├── postcode.feature
│ │ │ │ │ ├── queries.feature
│ │ │ │ │ ├── simple.feature
│ │ │ │ │ ├── structured.feature
│ │ │ │ │ └── v1_geocodejson.feature
│ │ │ │ └── status/
│ │ │ │ ├── failures.feature
│ │ │ │ └── simple.feature
│ │ │ ├── db/
│ │ │ │ ├── import/
│ │ │ │ │ ├── addressing.feature
│ │ │ │ │ ├── country.feature
│ │ │ │ │ ├── entrances.feature
│ │ │ │ │ ├── interpolation.feature
│ │ │ │ │ ├── linking.feature
│ │ │ │ │ ├── naming.feature
│ │ │ │ │ ├── parenting.feature
│ │ │ │ │ ├── placex.feature
│ │ │ │ │ ├── postcodes.feature
│ │ │ │ │ ├── rank_computation.feature
│ │ │ │ │ └── search_name.feature
│ │ │ │ ├── query/
│ │ │ │ │ ├── housenumbers.feature
│ │ │ │ │ ├── interpolation.feature
│ │ │ │ │ ├── japanese.feature
│ │ │ │ │ ├── linking.feature
│ │ │ │ │ ├── normalization.feature
│ │ │ │ │ ├── postcodes.feature
│ │ │ │ │ ├── reverse.feature
│ │ │ │ │ └── search_simple.feature
│ │ │ │ └── update/
│ │ │ │ ├── addressing.feature
│ │ │ │ ├── country.feature
│ │ │ │ ├── entrances.feature
│ │ │ │ ├── interpolation.feature
│ │ │ │ ├── linked_places.feature
│ │ │ │ ├── parenting.feature
│ │ │ │ ├── postcode.feature
│ │ │ │ └── simple.feature
│ │ │ └── osm2pgsql/
│ │ │ ├── import/
│ │ │ │ ├── broken.feature
│ │ │ │ ├── custom_style.feature
│ │ │ │ ├── entrances.feature
│ │ │ │ ├── interpolation.feature
│ │ │ │ ├── relation.feature
│ │ │ │ ├── simple.feature
│ │ │ │ └── tags.feature
│ │ │ └── update/
│ │ │ ├── entrances.feature
│ │ │ ├── interpolations.feature
│ │ │ ├── postcodes.feature
│ │ │ ├── relation.feature
│ │ │ ├── simple.feature
│ │ │ └── tags.feature
│ │ ├── test_api.py
│ │ ├── test_db.py
│ │ ├── test_osm2pgsql.py
│ │ └── utils/
│ │ ├── __init__.py
│ │ ├── api_result.py
│ │ ├── api_runner.py
│ │ ├── checks.py
│ │ ├── db.py
│ │ ├── geometry_alias.py
│ │ ├── grid.py
│ │ └── place_inserter.py
│ ├── python/
│ │ ├── api/
│ │ │ ├── conftest.py
│ │ │ ├── fake_adaptor.py
│ │ │ ├── query_processing/
│ │ │ │ ├── test_normalize.py
│ │ │ │ ├── test_regex_replace.py
│ │ │ │ └── test_split_japanese_phrases.py
│ │ │ ├── search/
│ │ │ │ ├── test_api_search_query.py
│ │ │ │ ├── test_db_search_builder.py
│ │ │ │ ├── test_icu_query_analyzer.py
│ │ │ │ ├── test_postcode_parser.py
│ │ │ │ ├── test_query.py
│ │ │ │ ├── test_query_analyzer_factory.py
│ │ │ │ ├── test_search_address.py
│ │ │ │ ├── test_search_country.py
│ │ │ │ ├── test_search_near.py
│ │ │ │ ├── test_search_places.py
│ │ │ │ ├── test_search_poi.py
│ │ │ │ ├── test_search_postcode.py
│ │ │ │ └── test_token_assignment.py
│ │ │ ├── test_api_connection.py
│ │ │ ├── test_api_deletable_v1.py
│ │ │ ├── test_api_details.py
│ │ │ ├── test_api_lookup.py
│ │ │ ├── test_api_polygons_v1.py
│ │ │ ├── test_api_reverse.py
│ │ │ ├── test_api_search.py
│ │ │ ├── test_api_status.py
│ │ │ ├── test_api_types.py
│ │ │ ├── test_export.py
│ │ │ ├── test_helpers_v1.py
│ │ │ ├── test_localization.py
│ │ │ ├── test_result_formatting_v1.py
│ │ │ ├── test_result_formatting_v1_reverse.py
│ │ │ ├── test_results.py
│ │ │ ├── test_server_glue_v1.py
│ │ │ ├── test_timeout.py
│ │ │ └── test_warm.py
│ │ ├── cli/
│ │ │ ├── conftest.py
│ │ │ ├── test_cli.py
│ │ │ ├── test_cmd_admin.py
│ │ │ ├── test_cmd_api.py
│ │ │ ├── test_cmd_import.py
│ │ │ ├── test_cmd_index.py
│ │ │ ├── test_cmd_refresh.py
│ │ │ └── test_cmd_replication.py
│ │ ├── config/
│ │ │ ├── test_config.py
│ │ │ └── test_config_load_module.py
│ │ ├── conftest.py
│ │ ├── cursor.py
│ │ ├── data/
│ │ │ └── test_country_info.py
│ │ ├── db/
│ │ │ ├── test_connection.py
│ │ │ ├── test_properties.py
│ │ │ ├── test_sql_preprocessor.py
│ │ │ ├── test_status.py
│ │ │ └── test_utils.py
│ │ ├── dummy_tokenizer.py
│ │ ├── indexer/
│ │ │ └── test_indexing.py
│ │ ├── mock_icu_word_table.py
│ │ ├── pytest.ini
│ │ ├── tokenizer/
│ │ │ ├── sanitizers/
│ │ │ │ ├── test_clean_housenumbers.py
│ │ │ │ ├── test_clean_postcodes.py
│ │ │ │ ├── test_clean_tiger_tags.py
│ │ │ │ ├── test_delete_tags.py
│ │ │ │ ├── test_sanitizer_config.py
│ │ │ │ ├── test_split_name_list.py
│ │ │ │ ├── test_strip_brace_terms.py
│ │ │ │ ├── test_tag_analyzer_by_language.py
│ │ │ │ └── test_tag_japanese.py
│ │ │ ├── test_factory.py
│ │ │ ├── test_icu.py
│ │ │ ├── test_icu_rule_loader.py
│ │ │ ├── test_place_sanitizer.py
│ │ │ └── token_analysis/
│ │ │ ├── test_analysis_postcodes.py
│ │ │ ├── test_generic.py
│ │ │ ├── test_generic_mutation.py
│ │ │ └── test_simple_trie.py
│ │ ├── tools/
│ │ │ ├── conftest.py
│ │ │ ├── test_add_osm_data.py
│ │ │ ├── test_admin.py
│ │ │ ├── test_check_database.py
│ │ │ ├── test_database_import.py
│ │ │ ├── test_exec_utils.py
│ │ │ ├── test_freeze.py
│ │ │ ├── test_import_special_phrases.py
│ │ │ ├── test_migration.py
│ │ │ ├── test_postcodes.py
│ │ │ ├── test_refresh.py
│ │ │ ├── test_refresh_address_levels.py
│ │ │ ├── test_refresh_create_functions.py
│ │ │ ├── test_refresh_wiki_data.py
│ │ │ ├── test_replication.py
│ │ │ ├── test_sp_csv_loader.py
│ │ │ ├── test_sp_importer.py
│ │ │ ├── test_sp_wiki_loader.py
│ │ │ └── test_tiger_data.py
│ │ └── utils/
│ │ ├── test_centroid.py
│ │ └── test_json_writer.py
│ ├── testdata/
│ │ ├── sp_csv_test.csv
│ │ └── special_phrases_test_content.txt
│ └── testdb/
│ ├── additional_api_test.data.osm
│ ├── apidb-test-data.pbf
│ ├── full_en_phrases_test.csv
│ └── tiger/
│ └── 01001.csv
├── utils/
│ ├── import_multiple_regions.sh
│ └── update_database.sh
└── vagrant/
├── Install-on-Ubuntu-22.sh
└── Install-on-Ubuntu-24.sh
================================================
FILE CONTENTS
================================================
================================================
FILE: .codespellrc
================================================
# https://github.com/codespell-project/codespell
[codespell]
skip = ./man/nominatim.1,data,./docs/styles.css,lib-php,module,munin,osm2pgsql,./test,./settings/*.lua,./settings/*.yaml,./settings/**/*.yaml,./settings/icu-rules,./nominatim/tokenizer/token_analysis/config_variants.py
# Need to be lowercase in the list
# Unter = Unter den Linden (an example address)
ignore-words-list = inout,unter
================================================
FILE: .flake8
================================================
[flake8]
max-line-length = 100
max-doc-length = 100
extend-ignore =
# something == None constructs are needed for SQLAlchemy
E711
per-file-ignores =
__init__.py: F401
test/python/utils/test_json_writer.py: E131
**/conftest.py: E402
test/bdd/*: F821
================================================
FILE: .github/FUNDING.yml
================================================
github: lonvia
custom: "https://nominatim.org/funding/"
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
contact_links:
- name: Nominatim Discussions
url: https://github.com/osm-search/Nominatim/discussions
about: Ask questions, get support, share ideas and discuss with community members.
- name: Discussions about OpenStreetMap data
url: https://community.openstreetmap.org/
about: Ask questions about the data used by Nominatim and discuss with the OSM community.
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
<!-- Before opening a new feature request, please search through the open issue to check that your request hasn't been reported already. -->
**Is your feature request related to a problem? Please describe.**
<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
**Describe the solution you'd like**
<!-- A clear and concise description of what you want to happen. -->
**Describe alternatives you've considered**
<!-- A clear and concise description of any alternative solutions or features you've considered. -->
**Additional context**
<!-- Add any other context or screenshots about the feature request here. -->
================================================
FILE: .github/ISSUE_TEMPLATE/report-issues-with-search-results.md
================================================
---
name: Report issues with search results
about: You have searched something with Nominatim and did not get the expected result.
title: ''
labels: ''
assignees: ''
---
<!-- Note: this template is for reporting problems with searching. If you have found an issue with the data, you need to report/fix the issue directly in OpenStreetMap. See https://www.openstreetmap.org/fixthemap for details. -->
## What did you search for?
<!-- Please try to provide a link to your search. You can go to https://nominatim.openstreetmap.org and repeat your search there. If you originally found the issue somewhere else, please tell us what software/website you were using. -->
## What result did you get?
## What result did you expect?
**When the result is in the right place and just named wrongly:**
<!-- Please tell us the display name you expected. -->
**When the result is missing completely:**
<!-- Make sure that the data you are looking for is in OpenStreetMap. Provide a link to the OpenStreetMap object or if you cannot get it, a link to the map on https://openstreetmap.org where you expect the result to be.
To get the link to the OSM object, you can try the following:
* Go to [https://openstreetmap.org](https://openstreetmap.org).
* Move to the area of the map where you expect the result and then zoom in as much as possible.
* Click on the question mark on the right side of the map. You get a question cursor. Use it to click on the map where your object is located.
* Find the object of interest in the list that appears on the left side.
* Click on the object and report back the URL that the browser shows.
-->
## Further details
<!-- Anything else we should know about the search. Particularities with addresses in the area etc. -->
================================================
FILE: .github/ISSUE_TEMPLATE/report-problems-with-the-software.md
================================================
---
name: Report problems with the software
about: You have your own installation of Nominatim and found a bug.
title: ''
labels: ''
assignees: ''
---
<!-- Note: if you are installing Nominatim through a docker image, you should report issues with the installation process with the docker repository first.
Do not send screen shots! Copy any console output directly into the issue.
-->
**Describe the bug**
<!-- A clear and concise description of what the bug is.-->
**To Reproduce**
<!-- Please describe what you did to get to the issue. -->
**Software Environment (please complete the following information):**
- Nominatim version:
- Postgresql version:
- Postgis version:
- OS:
**Hardware Configuration (please complete the following information):**
- RAM:
- number of CPUs:
- type and size of disks:
**Postgresql Configuration:**
<!-- List any configuration items you changed in your postgresql configuration. -->
**Nominatim Configuration:**
<!-- List the contents of your customized `.env` file. -->
**Additional context**
<!-- Add any other context about the problem here. -->
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
## Summary
<!-- Describe the purpose of your pull request and, if present, link to existing issues. -->
## AI usage
<!-- Please list where and to what extent AI was used. -->
## Contributor guidelines (mandatory)
<!-- We only accept pull requests that follow our guidelines. A deliberate violation may result in a ban. -->
- [ ] I have adhered to the [coding style](https://github.com/osm-search/Nominatim/blob/master/CONTRIBUTING.md#coding-style)
- [ ] I have [tested](https://github.com/osm-search/Nominatim/blob/master/CONTRIBUTING.md#testing) the proposed changes
- [ ] I have [disclosed](https://github.com/osm-search/Nominatim/blob/master/CONTRIBUTING.md#using-ai-assisted-code-generators) above any use of AI to generate code, documentation, or the pull request description
================================================
FILE: .github/actions/build-nominatim/action.yml
================================================
name: 'Build Nominatim'
inputs:
dependencies:
description: 'Where to install dependencies from (pip/apt)'
required: false
default: 'pip'
runs:
using: "composite"
steps:
- name: Clean out the disk
run: |
sudo rm -rf /opt/hostedtoolcache/go /opt/hostedtoolcache/CodeQL /usr/lib/jvm /usr/local/share/chromium /usr/local/lib/android
df -h
shell: bash
- name: Install general prerequisites
run: |
sudo apt-get install -y -qq libspatialite-dev libsqlite3-mod-spatialite libicu-dev virtualenv python3-dev osm2pgsql
shell: bash
- name: Install prerequisites from apt
run: |
sudo apt-get install -y -qq python3-icu python3-datrie python3-jinja2 python3-psutil python3-dotenv python3-yaml python3-sqlalchemy python3-psycopg python3-asyncpg python3-mwparserfromhell
shell: bash
if: inputs.dependencies == 'apt'
- name: Setup virtual environment (for pip)
run: |
virtualenv venv
./venv/bin/pip install -U pip
shell: bash
if: inputs.dependencies == 'pip'
- name: Setup virtual environment (for apt)
run: |
virtualenv venv --system-site-packages
shell: bash
if: inputs.dependencies == 'apt'
- name: Build nominatim
run: ./venv/bin/pip install Nominatim/packaging/nominatim-{api,db}
shell: bash
================================================
FILE: .github/actions/setup-postgresql/action.yml
================================================
name: 'Setup Postgresql and Postgis'
description: 'Installs PostgreSQL and PostGIS and configures it for CI tests'
inputs:
postgresql-version:
description: 'Version of PostgreSQL to install'
required: true
runs:
using: "composite"
steps:
- name: Remove existing PostgreSQL
run: |
sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh -y
sudo apt-get purge -yq postgresql*
sudo apt-get update -qq
shell: bash
- name: Install PostgreSQL
run: |
sudo apt-get install -y -qq --no-install-suggests --no-install-recommends postgresql-client-${PGVER} postgresql-${PGVER}-postgis-3 postgresql-${PGVER}-postgis-3-scripts postgresql-contrib-${PGVER} postgresql-${PGVER}
shell: bash
env:
PGVER: ${{ inputs.postgresql-version }}
- name: Adapt postgresql configuration
run: |
echo 'fsync = off' | sudo tee /etc/postgresql/${PGVER}/main/conf.d/local.conf
echo 'synchronous_commit = off' | sudo tee -a /etc/postgresql/${PGVER}/main/conf.d/local.conf
echo 'full_page_writes = off' | sudo tee -a /etc/postgresql/${PGVER}/main/conf.d/local.conf
echo 'shared_buffers = 1GB' | sudo tee -a /etc/postgresql/${PGVER}/main/conf.d/local.conf
echo 'port = 5432' | sudo tee -a /etc/postgresql/${PGVER}/main/conf.d/local.conf
shell: bash
env:
PGVER: ${{ inputs.postgresql-version }}
- name: Setup database
run: |
sudo systemctl restart postgresql
sudo -u postgres createuser -S www-data
sudo -u postgres createuser -s runner
shell: bash
================================================
FILE: .github/actions/setup-postgresql-windows/action.yml
================================================
name: 'Setup Postgresql and Postgis on Windows'
description: 'Installs PostgreSQL and PostGIS for Windows and configures it for CI tests'
inputs:
postgresql-version:
description: 'Version of PostgreSQL to install'
required: true
runs:
using: "composite"
steps:
- name: Set up PostgreSQL variables
shell: pwsh
run: |
$version = "${{ inputs.postgresql-version }}"
$root = "C:\Program Files\PostgreSQL\$version"
$bin = "$root\bin"
echo "PGROOT=$root" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
echo "PGBIN=$bin" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
echo "$bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
- name: Decide Postgis version (Windows)
id: postgis-ver
shell: pwsh
run: |
echo "PowerShell version: ${PSVersionTable.PSVersion}"
$PG_VERSION = Split-Path $env:PGROOT -Leaf
$postgis_page = "https://download.osgeo.org/postgis/windows/pg$PG_VERSION"
echo "Detecting PostGIS version from $postgis_page for PostgreSQL $PG_VERSION"
$pgis_bundle = (Invoke-WebRequest -Uri $postgis_page -ErrorAction Stop).Links.Where({$_.href -match "^postgis.*zip$"}).href
if (!$pgis_bundle) {
Write-Error "Could not find latest PostGIS version in $postgis_page that would match ^postgis.*zip$ pattern"
exit 1
}
$pgis_bundle = [IO.Path]::ChangeExtension($pgis_bundle, [NullString]::Value)
$pgis_bundle_url = "$postgis_page/$pgis_bundle.zip"
Add-Content $env:GITHUB_OUTPUT "postgis_file=$pgis_bundle"
Add-Content $env:GITHUB_OUTPUT "postgis_bundle_url=$pgis_bundle_url"
- uses: actions/cache@v5
with:
path: |
C:/postgis.zip
key: postgis-cache-${{ steps.postgis-ver.outputs.postgis_file }}
- name: Download postgis
shell: pwsh
run: |
if (!(Test-Path "C:\postgis.zip")){(new-object net.webclient).DownloadFile($env:PGIS_BUNDLE_URL, "c:\postgis.zip")}
if (Test-path "c:\postgis_archive"){Remove-Item "c:\postgis_archive" -Recurse -Force}
7z x c:\postgis.zip -oc:\postgis_archive
env:
PGIS_BUNDLE_URL: ${{ steps.postgis-ver.outputs.postgis_bundle_url }}
- name: Install postgis
shell: bash
run: |
echo "Root: $PGROOT, Bin: $PGBIN"
cp -r c:/postgis_archive/postgis-bundle-*/* "$PGROOT"
- name: Start PostgreSQL on Windows
run: |
$pgService = Get-Service -Name postgresql*
Set-Service -InputObject $pgService -Status running -StartupType automatic
Start-Process -FilePath "$env:PGBIN\pg_isready" -Wait -PassThru
shell: pwsh
- name: Adapt postgresql configuration
shell: pwsh
env:
PGPASSWORD: root
run: |
& "$env:PGBIN\psql" -U postgres -d postgres -c "ALTER SYSTEM SET fsync = 'off';"
& "$env:PGBIN\psql" -U postgres -d postgres -c "ALTER SYSTEM SET synchronous_commit = 'off';"
& "$env:PGBIN\psql" -U postgres -d postgres -c "ALTER SYSTEM SET full_page_writes = 'off';"
& "$env:PGBIN\psql" -U postgres -d postgres -c "ALTER SYSTEM SET shared_buffers = '1GB';"
& "$env:PGBIN\psql" -U postgres -d postgres -c "ALTER SYSTEM SET port = 5432;"
Restart-Service -Name postgresql*
Start-Process -FilePath "$env:PGBIN\pg_isready" -Wait -PassThru
- name: Setup database users
shell: pwsh
env:
PGPASSWORD: root
run: |
& "$env:PGBIN\createuser" -U postgres -S www-data
& "$env:PGBIN\createuser" -U postgres -s runner
================================================
FILE: .github/workflows/ci-tests.yml
================================================
name: CI Tests
on: [ push, pull_request ]
jobs:
create-archive:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
submodules: true
- uses: actions/cache@v5
with:
path: |
data/country_osm_grid.sql.gz
key: nominatim-country-data-1
- name: Package tarball
run: |
if [ ! -f data/country_osm_grid.sql.gz ]; then
wget --no-verbose -O data/country_osm_grid.sql.gz https://www.nominatim.org/data/country_grid.sql.gz
fi
cd ..
tar czf nominatim-src.tar.bz2 Nominatim
mv nominatim-src.tar.bz2 Nominatim
- name: 'Upload Artifact'
uses: actions/upload-artifact@v7
with:
name: full-source
path: nominatim-src.tar.bz2
retention-days: 1
tests:
needs: create-archive
strategy:
matrix:
flavour: ["ubuntu-22", "ubuntu-24"]
include:
- flavour: ubuntu-22
ubuntu: 22
postgresql: 12
lua: '5.1'
dependencies: pip
python: '3.9'
- flavour: ubuntu-24
ubuntu: 24
postgresql: 18
lua: '5.3'
dependencies: apt
python: 'builtin'
runs-on: ubuntu-${{ matrix.ubuntu }}.04
steps:
- uses: actions/download-artifact@v8
with:
name: full-source
- name: Unpack Nominatim
run: tar xf nominatim-src.tar.bz2
- uses: ./Nominatim/.github/actions/setup-postgresql
with:
postgresql-version: ${{ matrix.postgresql }}
- uses: ./Nominatim/.github/actions/build-nominatim
with:
dependencies: ${{ matrix.dependencies }}
- uses: actions/cache@v5
with:
path: |
/usr/local/bin/osm2pgsql
key: osm2pgsql-bin-22-1
if: matrix.ubuntu == '22'
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python }}
if: matrix.python != 'builtin'
- name: Compile osm2pgsql
run: |
if [ ! -f /usr/local/bin/osm2pgsql ]; then
sudo apt-get install -y -qq libboost-system-dev libboost-filesystem-dev libexpat1-dev zlib1g-dev libbz2-dev libpq-dev libproj-dev libicu-dev liblua${LUA_VERSION}-dev lua-dkjson nlohmann-json3-dev
mkdir osm2pgsql-build
cd osm2pgsql-build
git clone https://github.com/osm2pgsql-dev/osm2pgsql
mkdir build
cd build
cmake ../osm2pgsql
make
sudo make install
cd ../..
rm -rf osm2pgsql-build
else
sudo apt-get install -y -qq libexpat1 liblua${LUA_VERSION}
fi
if: matrix.ubuntu == '22'
env:
LUA_VERSION: ${{ matrix.lua }}
- name: Install test prerequisites (apt)
run: sudo apt-get install -y -qq python3-pytest python3-pytest-asyncio uvicorn python3-falcon python3-aiosqlite python3-pyosmium
if: matrix.dependencies == 'apt'
- name: Install test prerequisites (pip)
run: ./venv/bin/pip install pytest-asyncio falcon starlette asgi_lifespan aiosqlite osmium uvicorn
if: matrix.dependencies == 'pip'
- name: Install test prerequisites
run: ./venv/bin/pip install pytest-bdd
- name: Install latest flake8
run: ./venv/bin/pip install -U flake8
- name: Python linting
run: ../venv/bin/python -m flake8 src test/python test/bdd
working-directory: Nominatim
- name: Install mypy and typechecking info
run: ./venv/bin/pip install -U mypy types-PyYAML types-jinja2 types-psutil types-requests types-ujson types-Pygments typing-extensions
if: matrix.dependencies == 'pip'
- name: Python static typechecking
run: ../venv/bin/python -m mypy --strict --python-version 3.9 src
working-directory: Nominatim
if: matrix.dependencies == 'pip'
- name: Python unit tests
run: ../venv/bin/python -m pytest test/python
working-directory: Nominatim
- name: BDD tests
run: |
../venv/bin/python -m pytest test/bdd --nominatim-purge
working-directory: Nominatim
tests-windows:
needs: create-archive
runs-on: windows-latest
steps:
- uses: actions/download-artifact@v8
with:
name: full-source
- name: Unpack Nominatim
run: tar xf nominatim-src.tar.bz2
- uses: ./Nominatim/.github/actions/setup-postgresql-windows
with:
postgresql-version: 17
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: '3.14'
- name: Install Spatialite
run: |
Invoke-WebRequest -Uri "https://www.gaia-gis.it/gaia-sins/windows-bin-amd64/mod_spatialite-5.1.0-win-amd64.7z" -OutFile "spatialite.7z"
7z x spatialite.7z -o"C:\spatialite"
echo "C:\spatialite\mod_spatialite-5.1.0-win-amd64" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
- name: Install osm2pgsql
run: |
Invoke-WebRequest -Uri "https://osm2pgsql.org/download/windows/osm2pgsql-latest-x64.zip" -OutFile "osm2pgsql.zip"
Expand-Archive -Path "osm2pgsql.zip" -DestinationPath "C:\osm2pgsql"
$BinDir = Get-ChildItem -Path "C:\osm2pgsql" -Recurse -Filter "osm2pgsql.exe" | Select-Object -ExpandProperty DirectoryName | Select-Object -First 1
if (-not $BinDir) {
Write-Error "Could not find osm2pgsql.exe"
exit 1
}
echo "$BinDir" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
$FullExePath = Join-Path $BinDir "osm2pgsql.exe"
echo "NOMINATIM_OSM2PGSQL_BINARY=$FullExePath" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
- name: Set UTF-8 encoding
run: |
[System.Console]::OutputEncoding = [System.Text.Encoding]::UTF8
- name: Install PyICU from wheel
run: |
python -m pip install https://github.com/cgohlke/pyicu-build/releases/download/v2.16.0/pyicu-2.16-cp314-cp314-win_amd64.whl
- name: Install test prerequisites
run: |
python -m pip install -U pip
python -m pip install pytest pytest-asyncio "psycopg[binary]!=3.3.0" python-dotenv pyyaml jinja2 psutil sqlalchemy pytest-bdd falcon starlette uvicorn asgi_lifespan aiosqlite osmium mwparserfromhell
- name: Python unit tests
run: |
python -m pytest test/python -k "not (import_osm or run_osm2pgsql)"
working-directory: Nominatim
install:
runs-on: ubuntu-latest
needs: create-archive
strategy:
matrix:
name: [Ubuntu-22, Ubuntu-24]
include:
- name: Ubuntu-22
image: "ubuntu:22.04"
ubuntu: 22
install_mode: install-apache
- name: Ubuntu-24
image: "ubuntu:24.04"
ubuntu: 24
install_mode: install-apache
container:
image: ${{ matrix.image }}
env:
LANG: en_US.UTF-8
defaults:
run:
shell: sudo -Hu nominatim bash --noprofile --norc -eo pipefail {0}
steps:
- name: Prepare container (Ubuntu)
run: |
export APT_LISTCHANGES_FRONTEND=none
export DEBIAN_FRONTEND=noninteractive
apt-get update -qq
apt-get install -y git sudo wget
ln -snf /usr/share/zoneinfo/$CONTAINER_TIMEZONE /etc/localtime && echo $CONTAINER_TIMEZONE > /etc/timezone
shell: bash
- name: Setup import user
run: |
useradd -m nominatim
echo 'nominatim ALL=(ALL:ALL) NOPASSWD: ALL' > /etc/sudoers.d/nominiatim
echo "/home/nominatim/Nominatim/vagrant/Install-on-${OS}.sh no $INSTALL_MODE" > /home/nominatim/vagrant.sh
shell: bash
env:
OS: ${{ matrix.name }}
INSTALL_MODE: ${{ matrix.install_mode }}
- uses: actions/download-artifact@v8
with:
name: full-source
path: /home/nominatim
- name: Install Nominatim
run: |
export USERNAME=nominatim
export USERHOME=/home/nominatim
export NOSYSTEMD=yes
export HAVE_SELINUX=no
tar xf nominatim-src.tar.bz2
. vagrant.sh
working-directory: /home/nominatim
- name: Prepare import environment
run: |
mv Nominatim/test/testdb/apidb-test-data.pbf test.pbf
rm -rf Nominatim
mkdir data-env-reverse
working-directory: /home/nominatim
- name: Add nominatim to path
run: |
sudo ln -s /home/nominatim/nominatim-venv/bin/nominatim /usr/local/bin/nominatim
- name: Need lua binary
run: |
sudo apt-get install -y lua5.4 lua-dkjson
- name: Print version
run: nominatim --version
working-directory: /home/nominatim/nominatim-project
- name: Print taginfo
run: lua ./nominatim-venv/lib/*/site-packages/nominatim_db/resources/lib-lua/taginfo.lua
working-directory: /home/nominatim
- name: Collect host OS information
run: nominatim admin --collect-os-info
working-directory: /home/nominatim/nominatim-project
- name: Import
run: nominatim import --osm-file ../test.pbf
working-directory: /home/nominatim/nominatim-project
- name: Import special phrases
run: nominatim special-phrases --import-from-wiki
working-directory: /home/nominatim/nominatim-project
- name: Check full import
run: nominatim admin --check-database
working-directory: /home/nominatim/nominatim-project
- name: Warm up database
run: nominatim admin --warm
working-directory: /home/nominatim/nominatim-project
- name: Install osmium
run: |
/home/nominatim/nominatim-venv/bin/pip install osmium
- name: Run update
run: |
nominatim replication --init
NOMINATIM_REPLICATION_MAX_DIFF=1 nominatim replication --once
working-directory: /home/nominatim/nominatim-project
- name: Clean up database
run: nominatim refresh --postcodes --word-tokens
working-directory: /home/nominatim/nominatim-project
- name: Run reverse-only import
run : |
echo 'NOMINATIM_DATABASE_DSN="pgsql:dbname=reverse"' >> .env
nominatim import --osm-file ../test.pbf --reverse-only --no-updates
working-directory: /home/nominatim/data-env-reverse
- name: Check reverse-only import
run: nominatim admin --check-database
working-directory: /home/nominatim/data-env-reverse
- name: Clean up database (reverse-only import)
run: nominatim refresh --postcodes --word-tokens
working-directory: /home/nominatim/nominatim-project
install-no-superuser:
runs-on: ubuntu-24.04
needs: create-archive
steps:
- uses: actions/download-artifact@v8
with:
name: full-source
- name: Unpack Nominatim
run: tar xf nominatim-src.tar.bz2
- uses: ./Nominatim/.github/actions/setup-postgresql
with:
postgresql-version: 16
- uses: ./Nominatim/.github/actions/build-nominatim
- name: Prepare import environment
run: |
mv Nominatim/test/testdb/apidb-test-data.pbf test.pbf
rm -rf Nominatim
- name: Prepare Database
run: |
./venv/bin/nominatim import --prepare-database
- name: Create import user
run: |
sudo -u postgres createuser osm-import
psql -d nominatim -c "ALTER USER \"osm-import\" WITH PASSWORD 'osm-import'"
psql -d nominatim -c 'GRANT CREATE ON SCHEMA public TO "osm-import"'
- name: Run import
run: |
NOMINATIM_DATABASE_DSN="pgsql:host=127.0.0.1;dbname=nominatim;user=osm-import;password=osm-import" ./venv/bin/nominatim import --continue import-from-file --osm-file test.pbf
- name: Check full import
run: ./venv/bin/nominatim admin --check-database
migrate:
runs-on: ubuntu-24.04
needs: create-archive
steps:
- uses: actions/download-artifact@v8
with:
name: full-source
- name: Unpack Nominatim
run: tar xf nominatim-src.tar.bz2
- uses: ./Nominatim/.github/actions/setup-postgresql
with:
postgresql-version: 18
- name: Install Python dependencies
run: |
sudo apt-get install --no-install-recommends virtualenv osm2pgsql
- name: Install Nominatim master version
run: |
virtualenv master
cd Nominatim
../master/bin/pip install packaging/nominatim-db
- name: Install Nominatim from pypi
run: |
virtualenv release
./release/bin/pip install nominatim-db
- name: Import Nominatim database using release
run: |
./release/bin/nominatim import --osm-file Nominatim/test/testdb/apidb-test-data.pbf
./release/bin/nominatim add-data --file Nominatim/test/testdb/additional_api_test.data.osm
- name: Migrate to master version
run: |
./master/bin/nominatim admin --migrate
./release/bin/nominatim add-data --file Nominatim/test/testdb/additional_api_test.data.osm
================================================
FILE: .gitignore
================================================
*.log
*.pyc
*.swp
docs/develop/*.png
site-html
build
dist
.coverage
.vagrant
data/country_osm_grid.sql.gz
================================================
FILE: .gitmodules
================================================
================================================
FILE: .mypy.ini
================================================
[mypy]
plugins = sqlalchemy.ext.mypy.plugin
[mypy-icu.*]
ignore_missing_imports = True
[mypy-asyncpg.*]
ignore_missing_imports = True
[mypy-dotenv.*]
ignore_missing_imports = True
================================================
FILE: AUTHORS
================================================
Nominatim was written by:
* Brian Quinion
* Sarah Hoffmann
* Marc Tobias Metten
* markigail
* AntoJvlt
* gemo1011
* darkshredder
and many more.
For a full list of contributors see the Git logs or visit
https://github.com/openstreetmap/Nominatim/graphs/contributors
================================================
FILE: CONTRIBUTING.md
================================================
# Nominatim contribution guidelines
## Reporting Bugs
Bugs can be reported at https://github.com/openstreetmap/Nominatim/issues.
Please always open a separate issue for each problem. In particular, do
not add your bugs to closed issues. They may look similar to you but
often are completely different from the maintainer's point of view.
If you just have a question or when you are not sure if what you have found
is an actual bug, use the [Discussion section](https://github.com/openstreetmap/Nominatim/discussions).
If you have questions about the underlying OpenStreetMap data rather than
the geocoding software, then the
[OpenStreetMap forum](https://community.openstreetmap.org/) is the best
place to start.
## Workflow for Pull Requests
We love to get pull requests from you. We operate the "Fork & Pull" model
explained at
https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests
You should fork the project into your own repo, create a topic branch
there and then make a single pull requests back to the main repository.
Your pull requests will then be reviewed and discussed.
Enable CI (we use Github Actions workflows) on your fork. It will run the
full test suite whenever you push to one of your branches.
https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository
Please make sure to follow these guidelines:
* Make sure CI passes _before_ opening the pull request. Check the "Actions" tab
in your repo to make sure everything works.
* Make sure that you have time to react to these comments and amend the code or
engage in a conversation. Do not expect that others will pick up your code,
it will almost never happen.
* Open a separate pull request for each issue you want to address.
Don't mix multiple changes. In particular, don't mix style cleanups with
feature pull requests (exceptions, see 'Style modernisation' below).
* For small fixes and amendments open a PR directly.
If you plan to make larger changes, please open an issue first or comment
on the appropriate issue to outline your planned implementation.
### Using AI-assisted code generators
PRs that include AI-generated content, may that be in code, in the PR
description or in documentation need to
1. clearly mark the AI-generated sections as such, for example, by
mentioning all use of AI in the PR description, and
2. include proof that you have run the generated code on an actual
installation of Nominatim. Adding and executing tests will not be
sufficient. You need to show that the code actually solves the problem
the PR claims to solve.
## Getting Started with Development
Please see the development section of the Nominatim documentation for
* [an architecture overview](https://nominatim.org/release-docs/develop/develop/overview/)
and backgrounds on some of the algorithms
* [how to set up a development environment](https://nominatim.org/release-docs/develop/develop/Development-Environment/)
* and background on [how tests are organised](https://nominatim.org/release-docs/develop/develop/Testing/)
## Coding style
The coding style for Python is enforced with flake8. It can be tested with:
```
make lint
```
SQL code is currently not linted but should follow the following rules:
* 2 spaces indentation
* UPPER CASE for all SQL keywords
### Style modernisation
There are a few places where we modernize code style as we go. The following
changes can be made when you touch the code anyway:
* update copyright date in the file header to the current year
* switch Python code to use [generics in standard collections](https://docs.python.org/3/whatsnew/3.9.html#type-hinting-generics-in-standard-collections)
## Testing
Before submitting a pull request make sure that the tests pass:
```
make tests
```
## Releases
Nominatim follows semantic versioning. Major releases are done for large changes
that require (or at least strongly recommend) a reimport of the databases.
Minor releases can usually be applied to existing databases. Patch releases
contain bug fixes only and are released from a separate branch where the
relevant changes are cherry-picked from the master branch.
Checklist for releases:
* [ ] increase versions in
* `src/nominatim_api/version.py`
* `src/nominatim_db/version.py`
* [ ] update `ChangeLog` (copy information from patch releases from release branch)
* [ ] complete `docs/admin/Migration.md`
* [ ] update EOL dates in `SECURITY.md`
* [ ] commit and make sure CI tests pass
* [ ] update OSMF production repo and release new version -post1 there
* [ ] test migration
* download, build and import previous version
* migrate using master version
* run updates using master version
* [ ] prepare tarball:
* `git clone https://github.com/osm-search/Nominatim` (switch to right branch!)
* `rm -r .git*`
* copy country data into `data/`
* add version to base directory and package
* [ ] upload tarball to https://nominatim.org
* [ ] prepare documentation
* check out new docs branch
* change git checkout instructions to tarball download instructions or adapt version on existing ones
* build documentation and copy to https://github.com/osm-search/nominatim-org-site
* add new version to history
* [ ] check release tarball
* download tarball as per new documentation instructions
* compile and import Nominatim
* run `nominatim --version` to confirm correct version
* [ ] tag new release and add a release on github.com
* [ ] build pip packages and upload to pypi
* `make build`
* `twine upload dist/*`
================================================
FILE: COPYING
================================================
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for software and other kinds of works.
The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.
When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.
Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and modification follow.
TERMS AND CONDITIONS
0. Definitions.
“This License” refers to version 3 of the GNU General Public License.
“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.
To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work.
A “covered work” means either the unmodified Program or a work based on the Program.
To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.
To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
1. Source Code.
The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.
A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.
The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
The Corresponding Source for a work in source code form is that same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”.
c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
7. Additional Terms.
“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
11. Patents.
A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”.
A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.
If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”.
You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <https://www.gnu.org/philosophy/why-not-lgpl.html>.
================================================
FILE: ChangeLog
================================================
5.3.0
* reorganise postcode and interpolation handling into separate tables
* add table for handling associatedStreet relations (thanks @Itz-Agasta)
* allow TIGER data imports on frozen tables (thanks @AyushDharDubey)
* add layer filtering option to search cli command (thanks @Itz-Agasta)
* add support for addr:interpolation together with addr:housenumber
* add support for exclude_place_ids to take an OSM ID (thanks @Itz-Agasta)
* add more abbreviations for Malay (thanks @harithilmi)
and Pakistan (thanks @bgo-eiu)
* adaptions to boundary processing in Czech Republic, Australia and Brazil
* return admin_level tag in extratags (thanks @kad-link)
* clean up table creation SQL and add more constraints
* add new cli administration tool to grant read rights to a new user
(thanks @Itz-Agasta)
* remove uvicorn from the deployment instructions, guvicorn is now sufficient
* fix entrance output for reverse and lookup
* fix performance issue with instantiation of config (thanks @AyushDharDubey)
* fix badly quoted SQL
* ensure use of UTF-8 everywhere (thanks @kad-link)
* fix endless loop when indexing only partial ranks (thanks @jayaddison)
* fix erroring on /search endpoint when Postgresql wasn't running on startup
* improve searching addresses by addr:* tags (thanks @Itz-Agasta)
* add langauge-aware penalty for matching country names (thanks @Itz-Agasta)
* compute default langauge also for linked place names (thanks @jayaddison)
* use mwparserfromhell for parsing wiki pages (thanks @AyushDharDubey)
* refactor table creation SQL to be reusable in tests
* reduce SQL queries for reverse
* enforce non-null importance and remove all code that expects otherwise
* add rematching against country names
* import now reports on total time (thanks @daishu0000)
* give wikidata matches preference over name matching when linking places
* removed nat_name from list of parsed names
* exclude zero-only postcodes
* type annotation updates due to dependency changes (thanks @vytas5)
* improve display of test names for BDD tests
* enable CI unit tests on Windows (thanks @kad-link)
* remove unused settings from the documentation
* various fixes and improvements to documentation (thanks @28Deepakpandey,
@Aditya30ag, @AmmarYasser455, @jonas-endter-optimax-energy, @vai67)
5.2.0
* increase minimum required Python to 3.9
* index and output entrances of buildings and areas (thanks @emlove)
* name tags used for creating display names are now configurable
(thanks @astridx)
* new pattern-replacement query preprocessor (thanks @TuringVerified)
* special phrases can now be filtered by presence of tags (thanks @anqixxx)
* lua import style now always includes tags required by Nominatim
* improved query time reporting and logging
* improve word matching for languages with no word boundaries
* POIs with addresses inherited from surrounding building are no
longer returned in the address layer
* avoid creating a directory for the tokenizer when not needed
* replace behave with pytest-bdd for BDD testing
* refactoring and performance improvements to query parsing
* various smaller updates to styles
* remove English as default language for South Korea
* remove Japanese word variants
* updated country names for Norwegians (thanks @Johannes-Andersen)
* remove support for deprecated osm2pgsql gazetteer style
* fix updating of importances (also needs to update search_name table)
* fix query for deletable endpoint to use index again
* fix reindexing of contained places when a boundary is deleted and reinstated
* fix difference computation error when updating postcodes
* bracket handling sanitizer no longer strips bracket terms in the middle of
name
* reduce precision of stored coordinates to 7-digits everywhere
* avoid ST_Relate as it seems buggy on some systems
* remove setting for logging queries in DB, no longer functional
* postcode updates no longer require a project directory (needed for tests)
* refactor locale handling code (thanks @anqixxx)
* code updates for newer Python (thanks @emmanuel-ferdman)
* better test coverage (thanks @asharmalik19)
* various fixes and improvements to documentation
(thanks @anqixxx, @dave-meyer, @hasandiwan)
5.1.0
* replace datrie with simple internal trie implementation
* add pattern-based postcode parser for queries,
postcodes no longer need to be present in OSM to be found
* take variants into account when computing token similarity
* add extratags output to geocodejson format
* fix default layer setting used for structured queries
* update abbreviation lists for Russian and English
(thanks @shoorick, @IvanShift, @mhsrn21)
* fix variant generation for Norwegian
* fix normalization around space-like characters
* improve postcode search and handling of postcodes in queries
* reorganise internal query structure and get rid of slow enums
* enable code linting for tests
* various code moderinsations in test code (thanks @eumiro)
* remove setting osm2pgsql location via config.lib_dir
* make SQL functions parallel save as far as possible (thanks @otbutz)
* various fixes and improvements to documentation (thanks @TuringVerified)
5.0.0
* increase required versions for PostgreSQL (12+), PostGIS (3.0+)
* remove installation via cmake and debundle osm2pgsql
* remove deprecated PHP frontend
* remove deprecated legacy tokenizer
* add configurable pre-processing of queries
* add query pre-processor to split up Japanese addresses
* rewrite of osm2pgsql style implementation
(also adds support for osm2pgsql-themepark)
* reduce the number of SQL queries needed to complete a 'lookup' call
* improve computation of centroid for lines with only two points
* improve bbox output for postcode areas
* improve result order by returning the largest object when other things are
equal
* add fallback for reverse geocoding to default country tables
* exclude postcode areas from reverse geocoding
* disable search endpoint when database is reverse-only (regression)
* minor performance improvements to area split algorithm
* switch table and index creation to use autocommit mode to avoid deadlocks
* drop overly long ways during import
* restrict automatic migrations to versions 4.3+
* switch linting from pylint to flake8
* switch tests to use a wikimedia test file in the new CSV style
* various fixes and improvements to documentation
4.5.0
* allow building Nominatim as a pip package
* make osm2pgsql building optional
* switch importer to psycopg3
* allow output format of web search to be customized in self-installations
* look up potential postcode areas for postcode results
* add word usage statistics for address terms
* implement more light-weight CSV format for wiki importance tables
* rewrite SQL for place search to use window functions
* increase search radius when filtering by postcode
* prefer POI points over POI areas
* reintroduce full terms for address terms in search_name table
* reindex postcodes when their parent is deleted
* indexing: precompute counts of affected rows
* ensure consistent country assignments for overlapping countries
* make Nominatim[Async]API context manager to ensure proper calling of
close()
* make usage of project dir optional for library
* drop interpolations when no parent can be found
* style tweaks to reflect OSM usage (man_made, highway and others)
* deprecation of: bundled osm2pgsql, legacy tokenizer, PHP frontend
* make documentation buildable without CMake
* various fixes and improvements to documentation
4.4.1
* fix geocodejson output: admin level output should only print boundaries
* updating: restrict invalidation of child objects on large street features
* restrict valid interpolation house numbers to 0-999999
* fix import error when SQLAlchemy 1.4 and psycopg3 are installed
* various typo fixes in the documentation
4.4.0
* add export to SQLite database and SQLite support for the frontend
* switch to Python frontend as the default frontend
* update to osm2pgsql 1.11.0
* add support for new osm2pgsql middle table format
* simplify geometry for large polygon objects not used in addresses
* various performance tweaks for search in Python frontend
* fix regression in search with categories where it was confused with near
search
* partially roll back use of SQLAlchemy lambda statements due to bugs
in SQLAlchemy
* fix handling of timezones for timestamps from the database
* fix handling of full address searches in connection with a viewbox
* fix postcode computation of highway areas
* fix handling of timeout errors for Python <= 3.10
* fix address computation for postcode areas
* fix variable shadowing in osm2pgsql flex script, causing bugs with LuaJIT
* make sure extratags are always null when empty
* reduce importance of places without wikipedia reference
* improve performance of word count computations
* drop support for wikipedia tags with full URLs
* replace get_addressdata() SQL implementation with a Python function
* improve display name for non-address features
* fix postcode validation for postcodes with country code
(thanks @pawel-wroniszewski)
* add possibility to run imports without superuser database rights
(thanks @robbe-haesendonck)
* new CLI command for cleaning deleted relations (thanks @lujoh)
* add check for database version in the CLI check command
* updates to import styles ignoring more unused objects
* various typo fixes (thanks @kumarUjjawal)
4.3.2
* fix potential SQL injection issue for 'nominatim admin --collect-os-info'
* PHP frontend: fix on-the-fly lookup of postcode areas near boundaries
* Python frontend: improve handling of viewbox
* Python frontend: correct deployment instructions
4.3.1
* reintroduce result rematching
* improve search of multi-part names
* fix accidentally switched meaning of --reverse-only and --search-only in
warm command
4.3.0
* fix failing importance recalculation command
* fix merging of linked names into unnamed boundaries
* fix a number of corner cases with interpolation splitting resulting in
invalid geometries
* fix failure in website generation when password contains curly brackets
* fix broken use of ST_Project in PostGIS 3.4
* new NOMINATIM_SEARCH_WITHIN_COUNTRIES setting to restrict reverse lookups
to known countries (thanks @alfmarcua)
* allow negative OSM IDs (thanks @alfmarcua)
* disallow import of Tiger data in a frozen DB
* avoid UPDATE to change settings to be compatible with r/o DBs (thanks @t-tomek)
* update bundled osm2pgsql to 1.9.2
* reorganise osm2pgsql flex style and make it the default
* exclude names ending in :wikipedia from indexing
* no longer accept comma as a list separator in name tags
* process forward dependencies on update to catch updates in geometries
of ways and relations
* fix handling of isolated silent letters during transliteration
* no longer assign postcodes to large linear features like rivers
* introduce nominatim.paths module for finding data and libraries
* documentation layout changed to material theme
* new documentation section for library
* various smaller fixes to existing documentation
(thanks @woodpeck, @bloom256, @biswajit-k)
* updates to vagrant install scripts, drop support for Ubuntu 18
(thanks @n-timofeev)
* removed obsolete configuration variables from env.defaults
* add script for generating a taginfo description (thanks @biswajit-k)
* modernize Python code around BDD test and add testing of Python frontend
* lots of new BDD tests for API output
4.2.3
* fix deletion handling for 'nominatim add-data'
* adapt place_force_delete() to new deletion handling
* flex style: avoid dropping of postcode areas
* fix update errors on address interpolation handling
4.2.2
* extend flex-style library to fully support all default styles
* fix handling of Hebrew aleph
* do not assign postcodes to rivers
* fix string matching in PHP code
* update osm2pgsql (various updates to flex)
* fix slow query when deleting places on update
* fix CLI details query
* fix recalculation of importance values
* fix polygon simplification in reverse results
* add class/type information to reverse geocodejson result
* minor improvements to default tokenizer configuration
* various smaller fixes to documentation
4.2.1
* fix XSS vulnerability in debug view
4.2.0
* add experimental support for osm2pgsql flex style
* introduce secondary importance value to be retrieved from a raster data file
(currently still unused, to replace address importance, thanks to @tareqpi)
* add new report tool `nominatim admin --collect-os-info`
(thanks @micahcochran, @tareqpi)
* reorganise index to improve lookup performance and size
* run index creation after import in parallel
* run ANALYZE more selectively to speed up continuation of indexing
* fix crash on update when addr:interpolation receives an illegal value
* fix minimum number of retrieved results to be at least 10
* fix search for combinations of special term + name (e.g Hotel Bellevue)
* do not return interpolations without a parent street on reverse search
* improve invalidation of linked places on updates
* fix address parsing for interpolation lines
* make sure socket timeouts are respected during replication
(working around a bug in some versions of pyosmium)
* update bundled osm2pgsql to 1.7.1
* add support for PostgreSQL 15
* typing fixes to work with latest type annotations from typeshed
* smaller improvements to documentation (thanks to @mausch)
4.1.1
* fix XSS vulnerability in debug view
4.1.0
* switch to ICU tokenizer as default
* add housenumber normalization and support optional spaces during search
* add postcode format checking and support optional spaces during search
* add function for cleaning housenumbers in word table
* add updates/deletion of country names imported from OSM
* linked places no longer overwrite names from a place permanently
* move default country name configuration into yaml file (thanks @tareqpi)
* more compact layout for interpolation and TIGER tables
* introduce mutations to ICU tokenizer (used for German umlauts)
* support reinitializing a full project directory with refresh --website
* fix various issues with linked places on updates
* add support for external sanitizers and token analyzers
* add CLI commands for forced indexing
* add CLI command for version report
* add offline import mode
* change geocodejson to return a feature class in the 'type' field
* add ISO3166-2 to address output (thanks @I70l0teN4ik)
* improve parsing and matching of addr: tags
* support relations as street members of associatedStreet
* better ranking for address results from TIGER data
* adapt rank classification to changed tag usage in OSM
* update bundled osm2pgsql to 1.6.0
* add typing information to Python code
* improve unit test coverage
* reorganise and speed up code for BDD tests, drop support for scenes
* move PHP unit tests to PHP 9.5
* extensive typo fixes in documentation (thanks @woodpeck,@StephanGeorg,
@amandasaurus, @nslxndr, @stefkiourk, @Luflosi, @kianmeng)
* drop official support for installation on CentOS
* add installation instructions for Ubuntu 22.04
* add support for PHP8
* add setup instructions for updates and systemd
* drop support for PostgreSQL 9.5
4.0.2
* fix XSS vulnerability in debug view
4.0.1
* fix initialisation error in replication script
* ICU tokenizer: avoid any special characters in word tokens
* better error message when API php script does not exist
* fix quoting of house numbers in SQL queries
* small fixes and improvements in search query parsing
* add documentation for moving the database to a different machine
4.0.0
* refactor name token computation and introduce ICU tokenizer
* name processing now happens in the indexer outside the DB
* reorganizes abbreviation handling and moves it to the indexing phases
* adds preprocessing of names
* add country-specific ranking for Spain, Slovakia
* partially switch to using SP-GIST indexes
* better updating of dependent addresses for name changes in streets
* remove unused/broken tables for external housenumbers
* move external postcodes to CSV format and no longer save them in tables
(adds support for postcodes for arbitrary countries)
* remove postcode helper entries from placex (thanks @AntoJvlt)
* change required format for TIGER data to CSV
* move configuration of default languages from wiki into config file
* expect customized configuration files in project directory by default
* disable search API for reverse-only import (thanks @darkshredder)
* port most of maintenance/import code to Python and remove PHP utils
* add catch-up mode for replication
* add updating of special phrases (thanks @AntoJvlt)
* add support for special phrases in CSV files (thanks @AntoJvlt)
* switch to case-independent matching between place and boundary names
* remove disabling of reverse query parsing
* minor tweaks to search algorithm to avoid more false positives
* major overhaul of the administrator and developer documentation
* add security disclosure policy
* add testing of installation scripts via CI
* drop support for Python < 3.6 and Postgresql < 9.5
3.7.3
* fix XSS vulnerability in debug view
3.7.2
* fix database check for reverse-only imports
* do not error out in status API result when import date is missing
* add array_key_last function for PHP < 7.3 (thanks to @woodpeck)
* fix more url when server name is unknown (thanks to @mogita)
* commit changes to replication log table
3.7.1
* fix smaller issues with special phrases import (thanks @AntoJvlt)
* add index to speed up continued indexing during import
* fix index on location_property_tiger(parent_place_id) (thanks @changpingc)
* make sure Python code is backward-compatible with Python 3.5
* various documentation fixes
3.7.0
* switch to dotenv for configuration file
* introduce 'make install' (reorganising most of the code)
* introduce nominatim tool as replacement for various php scripts
* introduce project directories and allow multiple installations from same build
* clean up BDD tests: drop nose, reorganise step code
* simplify test database for API BDD tests and autoinstall database
* port most of the code for command-line tools to Python
(thanks to @darkshredder and @AntoJvlt)
* add tests for all tooling
* replace pyosmium-get-changes with custom internal implementation using
pyosmium
* improve search for queries with housenumber and partial terms
* add database versioning
* use jinja2 for preprocessing SQL files
* introduce automatic migrations
* reverse fix preference of interpolations over housenumbers
* parallelize indexing of postcodes
* add non-key indexes to speed up housenumber + street searches
* switch housenumber field in placex to save transliterated names
3.6.0
* add full support for searching by and displaying of addr:* tags
* improve address output for large-area objects
* better use of country names from OSM data for search and display
* better debug output for reverse call
* add support for addr:place links without an place equivalent in OSM
* improve finding postcodes with normalisation artefacts
* batch object to index for rank 30, avoiding a wrap-around of transaction
IDs in PostgreSQL
* introduce dynamic address rank computation for administrative boundaries
depending on linked objects and their place in the admin level hierarchy
* add country-specific address ranking for Indonesia, Russia, Belgium and
the Netherlands (thanks @hendrikmoree)
* make sure wikidata/wikipedia tags are imported for all styles
* make POIs searchable by name and housenumber (thanks @joy-yyd)
* reverse geocoding now ignores places without an address rank (rivers etc.)
* installation of a webserver is no longer mandatory, for development
use the php internal webserver via 'make serve
* reduce the influence of place nodes in addresses
* drop support for the unspecific is_in tag
* various minor tweaks to supplied styles
* move HTML web frontend into its own project
* move scripts for processing external data sources into separate directories
* introduce separate configuration for website (thanks @krahulreddy)
* update documentation, in particular, clean up development docs
* update osm2pgsql to 1.4.0
3.5.2
* ensure that wikipedia tags are imported for all styles
* reinstate verbosity for indexing during updates
* make house number reappear in display name on named POIs
* introduce batch processing in indexer to avoid transaction ID overrun
* increase splitting for large geometries to improve indexing speed
* remove deprecated get_magic_quotes_gpc() function
* make sure that all postcodes have an entry in word and are thus searchable
* remove use of ST_Covers in conjunction with ST_Intersects,
causes bad query planning and slow updates in Postgis3
* update osm2pgsql
3.5.1
* disable jit and parallel processing in PostgreSQL for osm2pgsql
* update libosmium to 2.15.6 (fixes an issue with processing hanging
on large multipolygons)
3.5.0
* structured select on HTML search page
* new PHP Nominatim\Shell class to wrap shell escaping
* remove polygon parameter from all API calls
* improve handling of postcode areas
* reorganise place linking algorithm, now using wikidata tag as well
* remove linkees from search_name and larger_area tables
* introduce country-specific address ranks
* reorganise rank address computation
* cleanup of partition function
* improve parenting for large POIs
* add support for Postgresql 12 and Postgis 3
* add earlier cleanup when --drop is given, to reduce memory usage
* remove use of place_id in URLs
* replace C nominatim indexer with a simpler Python implementation
* split up the huge sql/functions.sql file
* move osm2pgsql tests to osm2pgsql
* add new extratags style which imports all tags from OSM
* add new script for checking the import after completion
* update osm2pgsql, reducing memory usage
* use new wikipedia importance and add processing of wikidata tags
* add search form for details page
* use ExtraDataPath for country_grid table
* remove short_name from list of names to be displayed
* split up CMakeFile, so that all parts can be built separately
* update installation instructions for CentOS and Ubuntu
* add script for importing/updating multiple country extracts
* various documentation improvements
3.4.2
* fix security bug in /details endpoint where user input was not
properly sanitized
3.4.1
* update osm2pgsql to fix hans during updates and lost address numbers
during updates
3.4.0
* increase required version for PostgreSQL(9.3), PostGIS(2.2) and PHP(7.0)
* better error reporting for out-of-memory errors
* exclude postcode ranges separated by colon from centre point calculation
* update osm2pgsql, better handling of imports without flatnode file
* switch to more efficient algorithm for word set computation
* use only boundaries for country and state parts of addresses
* improve updates of addresses with housenumbers and interpolations
* remove country from place_addressline table and use country_code instead
* optimise indexes on search_name partition tables
* improve searching of attached streets for large objects like airports
* drop support for python 2
* new scripts for importing Wikidata for importance
* create and drop indexes concurrently to not clash with auto vacuum
* various documentation improvements
3.3.0
* zoom 17 in reverse now zooms in on minor streets
* fix use of postcode relations in address
* support for housenumber 0 on interpolations
* replace database abstraction DB with PDO and switch to using exceptions
* exclude line features at rank 30 from reverse geocoding
* remove self-reference and country from place_addressline
* make json output more readable (less escaping)
* update conversion scripts for postcodes
* scripts in utils/ are no longer executable (always use scripts in build dir)
* remove Natural Earth country fallback (OSM is complete enough)
* make rank assignments configurable
* allow accept languages with underscore
* new reverse-only import mode (without search index table)
* rely on boundaries only for states and countries
* update osm2pgsql, now using a configurable style
* provide multiple import styles
* improve search when house number and postcodes are dropped
* overhaul of setup code
* add support for PHPUnit 6
* update test database
* various documentation improvements
3.2.0
* complete rewrite of reverse search algorithm
* add new geojson and geocodejson output formats
* add simple export script to export addresses to CSV
* remove is_in terms from address computation
* remove unused search_name_country tables
* various smaller fixes to query parsing
* convert Tokens and token types to class types
* correctly handle update when boundary object type is changed
* improve debug output for /search endpoint
* update to latest osm2pgsql and leaflet.js
* overhaul of /details endpoint:
* new class parameter when using osmtype/osmid parameters
* permalink to instance-independent osmtype/osmid parameter format
* new json output format
* update CentOS vagrant machine to use SELinux
* add vagrant scripts for Ubuntu 18.04
* fix build process for BSD
* enable running the database on a different host than the setup scripts
* allow to configure use of custom PHP binaries (PHP_BIN)
* extensive coding style improvements to PHP code
* more PHP unit tests for new classes
* increase coverage for API tests
* add documentation for API
3.1.0
* rework postcode handling and introduce location_postcode table
* make setup less verbose and print a summary in the end
* setup: error out when web site user does not exist
* add more API tests to complete code coverage
* reinstate key-value amenity search (special term [key=value])
* fix detection of coordinates in query
* various smaller tweaks to ranking of search interpretations
* complete overhaul of PHP frontend code using OOP
* add address rank to details page
* update Tiger scripts for 2017 data and clean up unused code
* various bug fixes and improvements to UI
* improve reverse geocoding performance close to coasts
* more PHP style cleanup (quoting)
* allow unnamed road in reverse geocoding to avoid too far off results
* add function to recalculate counts for full-word search term
* add function to check if new updates are available
* update documentation and switch to mkdocs for generating HTML
3.0.1
* fix bug in geometry building algorithm in osm2pgsql
* fix typos in build instructions
3.0.0
* move to cmake build system
* various fixes to HTML output
* reverse endpoint now can return geometries
* add support for PHP7
* move to on-the-fly computation of interpolations
* improve handling of linked places (updating)
* improve test framework:
* replace lettuce with behave
* use smaller database for API tests
* drop support for postgres < 9.1, postgis < 2.0 and PHP < 5.4
* make external data use optional (useful for imports without US)
* detect postgres and postgis versions automatically
* clean up query logging and remove unused tables
* move installation documentation into this repo
* add self-documenting vagrant scripts
* remove --create-website, recommend to use website directory in build
* add accessor functions for URL parameters and improve error checking
* remove IP blocking and rate-limiting code
* enable CI via travis
* reformatting for more consistent coding style
* make country search term creation part of setup
* update country names and country grid
* handle roads that cross boundaries better
* keep full information on address tags
* update to refactored osm2pgsql which use libosmium based types
* switch from osmosis to pyosmium for updates
* be more strict when matching against special search terms
* handle postcode entries with multiple values correctly
2.5
* reverse geocoding includes looking up housenumbers from Tiger data
* added parameter to return simplified geometries
* new lookup call for getting address information for OSM objects
* new namedetails and extratags parameters that expose the name and extratags
fields of the placex table
* mobile website
* reverse web view
2.4
* drop support for postgres 8.4
* rewrite address interpolation
* switch to C++ version of osm2pgsql and rewrite tag filtering
* support for bridge:name and tunnel:name, man_made, junction
* drop way-node index (reduces database size by about 15%)
* add support for configuring tablespaces and webserver user
* better evaluation of search queries in right-to-left notation
* improve house number search for streets with many duplicate entries
* code cleanup (remove unused functions and tables)
2.3
* further improve ordering of results
* support for more lat/lon formats in search-as-reverse
* fix handling of GB postcodes
* new functional test suite
* support for waterway relations
* inherit postcodes from street to poi
* fix housenumber normalisation to find non-latin house numbers
* take viewbox into account for ordering of results
* pois may now inherit address tags from surrounding buildings
* improve what objects may participate in an address
* clean up handled class/type combinations to current OSM usage
* lots of bug fixes
2.2
* correct database rights for www-data
* add timestamps for update output
* load postgis via extension for postgis >= 2.0
* remove non-admin boundaries from addresses
* further improve ordering of results with same importance
* merge addr:postcode tags into object addresses
* include rank and importance in reverse geocode output
* replace ST_Line_Interpolate_Point with ST_LineInterpolatePoint
(for postgis >= 2.1)
* update osm2pgsql to latest version
* properly detect changes of admin_level
* remove landuses when name is removed
* smaller fixes
2.1
* update to openlayers 2.12 (now custom built)
* update fallback OSM boundaries
* add support for postgresql 9.2/9.3 and postgis 2.x
* add structured queries
* add options for polygon output in various formats
(geojson, svg, kml, postgis text)
* maintenance functions for deleting objects and updating regions
(plcae_force_update/place_force_delete)
* web view for polygons that need deleting
* rate limiting using memcache
* improve layout of details page
* add support for boundary:postal_code
* full CORS support
* improve parenting of POIs
* support for extract daily diffs from Geofabrik
* support for addresses without a street
(addr:place and conscription number house numbers)
* improve layout of word and search_name_* tables
* support for US ZIP+4 codes
* refactoring of front-end PHP code
* lots of smaller bug fixes
2.0.1
* delete outdated entries from location_area_country
* remove remaining uses of INTEGER, to allow node ids larger than 2^31
================================================
FILE: LICENSES/Apache-2.0.txt
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: LICENSES/GPL-2.0-only.txt
================================================
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
================================================
FILE: Makefile
================================================
all:
# Building of wheels
build: clean-build build-db build-api
clean-build:
rm -f dist/*
build-db:
python3 -m build packaging/nominatim-db --outdir dist/
build-api:
python3 -m build packaging/nominatim-api --outdir dist/
# Tests
tests: mypy lint pytest bdd
mypy:
mypy --strict --python-version 3.9 src
pytest:
pytest test/python
lint:
flake8 src test/python test/bdd
bdd:
pytest test/bdd --nominatim-purge
# Documentation
doc:
mkdocs build
serve-doc:
mkdocs serve
manpage:
argparse-manpage --pyfile man/create-manpage.py --function get_parser --project-name Nominatim --url https://nominatim.org > man/nominatim.1 --author 'the Nominatim developer community' --author-email info@nominatim.org
.PHONY: tests mypy pytest lint bdd build clean-build build-db build-api doc serve-doc manpage
================================================
FILE: README.md
================================================
[](https://github.com/osm-search/Nominatim/actions?query=workflow%3A%22CI+Tests%22)
Nominatim
=========
Nominatim (from the Latin, 'by name') is a tool to search OpenStreetMap data
by name and address (geocoding) and to generate synthetic addresses of
OSM points (reverse geocoding). An instance with up-to-date data can be found
at https://nominatim.openstreetmap.org. Nominatim is also used as one of the
sources for the Search box on the OpenStreetMap home page.
Documentation
=============
The documentation of the latest development version is in the
`docs/` subdirectory. A HTML version can be found at
https://nominatim.org/release-docs/develop/ .
Installation
============
The latest stable release can be downloaded from https://nominatim.org.
There you can also find [installation instructions for the release](https://nominatim.org/release-docs/latest/admin/Installation), as well as an extensive [Troubleshooting/FAQ section](https://nominatim.org/release-docs/latest/admin/Faq/).
[Detailed installation instructions for current master](https://nominatim.org/release-docs/develop/admin/Installation)
can be found at nominatim.org as well.
A quick summary of the necessary steps:
1. Clone this git repository and download the country grid
git clone https://github.com/osm-search/Nominatim.git
wget -O Nominatim/data/country_osm_grid.sql.gz https://nominatim.org/data/country_grid.sql.gz
2. Create a Python virtualenv and install the packages:
python3 -m venv nominatim-venv
./nominatim-venv/bin/pip install packaging/nominatim-{api,db}
3. Create a project directory, get OSM data and import:
mkdir nominatim-project
cd nominatim-project
../nominatim-venv/bin/nominatim import --osm-file <your planet file> 2>&1 | tee setup.log
4. Start the webserver:
./nominatim-venv/bin/pip install uvicorn falcon
../nominatim-venv/bin/nominatim serve
License
=======
The Python source code is available under a GPL license version 3 or later.
The Lua configuration files for osm2pgsql are released under the
Apache License, Version 2.0. All other files are under a GPLv2 license.
Contributing
============
Contributions, bug reports and pull requests are welcome. When reporting a
bug, please use one of the
[issue templates](https://github.com/osm-search/Nominatim/issues/new/choose)
and make sure to provide all the information requested. If you are not
sure if you have really found a bug, please ask for help in the forums
first (see 'Questions' below).
For details on contributing, have a look at the
[contribution guide](CONTRIBUTING.md).
Questions and help
==================
If you have questions about search results and the OpenStreetMap data
used in the search, use the [OSM Forum](https://community.openstreetmap.org/).
For questions, community help and discussions around the software and
your own installation of Nominatim, use the
[Github discussions forum](https://github.com/osm-search/Nominatim/discussions).
================================================
FILE: SECURITY.md
================================================
# Security Policy
## Supported Versions
All Nominatim releases receive security updates for two years.
The following table lists the end of support for all currently supported
versions.
| Version | End of support for security updates |
| ------- | ----------------------------------- |
| 5.3.x | 2028-04-04 |
| 5.2.x | 2027-10-29 |
| 5.1.x | 2027-04-01 |
| 5.0.x | 2027-02-06 |
| 4.5.x | 2026-09-12 |
## Reporting a Vulnerability
If you believe, you have found an issue in Nominatim that has implications on
security, please send a description of the issue to **security@nominatim.org**.
You will receive an acknowledgement of your mail within 3 work days where we
also notify you of the next steps.
## How we Disclose Security Issues
** The following section only applies to security issues found in released
versions. Issues that concern the master development branch only will be
fixed immediately on the branch with the corresponding PR containing the
description of the nature and severity of the issue. **
Patches for identified security issues are applied to all affected versions and
new minor versions are released. At the same time we release a statement at
the [Nominatim blog](https://nominatim.org/blog/) describing the nature of the
incident.
## List of Previous Incidents
* 2023-11-20 - [SQL injection vulnerability](https://nominatim.org/2023/11/20/release-432.html)
* 2023-02-21 - [cross-site scripting vulnerability](https://nominatim.org/2023/02/21/release-421.html)
* 2020-05-04 - [SQL injection issue on /details endpoint](https://lists.openstreetmap.org/pipermail/geocoding/2020-May/002012.html)
================================================
FILE: VAGRANT.md
================================================
# Install Nominatim in a virtual machine for development and testing
This document describes how you can install Nominatim inside a Ubuntu 24
virtual machine on your desktop/laptop (host machine). The goal is to give
you a development environment to easily edit code and run the test suite
without affecting the rest of your system.
The installation can run largely unsupervised. You should expect 1h from
start to finish depending on how fast your computer and download speed
is.
## Prerequisites
1. [Virtualbox](https://www.virtualbox.org/wiki/Downloads)
2. [Vagrant](https://www.vagrantup.com/downloads.html)
3. Nominatim
git clone https://github.com/openstreetmap/Nominatim.git
## Installation
1. Start the virtual machine
vagrant up ubuntu24-nginx
2. Log into the virtual machine
vagrant ssh ubuntu24-nginx
3. Import a small country (Monaco)
See the FAQ how to skip this step and point Nominatim to an existing database.
```
# inside the virtual machine:
cd nominatim-project
wget --no-verbose --output-document=monaco.osm.pbf http://download.geofabrik.de/europe/monaco-latest.osm.pbf
nominatim import --osm-file monaco.osm.pbf 2>&1 | tee monaco.$$.log
```
To repeat an import you'd need to delete the database first
dropdb --if-exists nominatim
## Development
Vagrant maps the virtual machine's port 8089 to your host machine. Thus you can
see Nominatim in action on [localhost:8089](http://localhost:8089/nominatim/).
You edit code on your host machine in any editor you like. There is no need to
restart any software: just refresh your browser window.
Use the functions of the `log()` object to create temporary debug output.
Add `&debug=1` to the URL to see the output.
In the Python BDD test you can use `logger.info()` for temporary debug
statements.
For more information on running tests, see
https://nominatim.org/release-docs/develop/develop/Testing/
## FAQ
##### Will it run on Windows?
Yes, Vagrant and Virtualbox can be installed on MS Windows just fine. You need
a 64bit version of Windows.
##### Will it run on Apple Silicon?
You might need to replace Virtualbox with [Parallels](https://www.parallels.com/products/desktop/).
There is no free/open source version of Parallels.
##### Why Monaco, can I use another country?
Of course! The Monaco import takes less than 10 minutes and works with 2GB RAM.
##### Will the results be the same as those from nominatim.openstreetmap.org?
No. Long-running Nominatim installations will differ once new import features (or
bug fixes) get added since those usually only get applied to new/changed data.
Also this document skips the optional Wikipedia data import which affects ranking
of search results. See [Nominatim installation](https://nominatim.org/release-docs/latest/admin/Installation)
for details.
##### Why Ubuntu? Can I test CentOS/Fedora/CoreOS/FreeBSD?
There used to be a Vagrant script for CentOS available, but the Nominatim directory
isn't symlinked/mounted to the host which makes development trickier. We used
it mainly for debugging installation with SELinux.
In general Nominatim will run in the other environments. The installation steps
are slightly different, e.g. the name of the package manager, Apache2 package
name, location of files. We chose Ubuntu because that is closest to the
nominatim.openstreetmap.org production environment.
You can configure/download other Vagrant boxes from
[https://app.vagrantup.com/boxes/search](https://app.vagrantup.com/boxes/search).
##### How can I connect to an existing database?
Let's say you have a Postgres database named `nominatim_it` on server `your-server.com`
and port `5432`. The Postgres username is `postgres`. You can edit the `.env` in your
project directory and point Nominatim to it.
NOMINATIM_DATABASE_DSN="pgsql:host=your-server.com;port=5432;user=postgres;dbname=nominatim_it
No data import or restarting necessary.
If the Postgres installation is behind a firewall, you can try
ssh -L 9999:localhost:5432 your-username@your-server.com
inside the virtual machine. It will map the port to `localhost:9999` and then
you edit `.env` file with
NOMINATIM_DATABASE_DSN="pgsql:host=localhost;port=9999;user=postgres;dbname=nominatim_it"
To access postgres directly remember to specify the hostname,
e.g. `psql --host localhost --port 9999 nominatim_it`
##### My computer is slow and the import takes too long. Can I start the virtual machine "in the cloud"?
Yes. It's possible to start the virtual machine on [Amazon AWS (plugin)](https://github.com/mitchellh/vagrant-aws)
or [DigitalOcean (plugin)](https://github.com/smdahlen/vagrant-digitalocean).
================================================
FILE: Vagrantfile
================================================
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
# Apache webserver
config.vm.network "forwarded_port", guest: 80, host: 8089
config.vm.network "forwarded_port", guest: 8088, host: 8088
# If true, then any SSH connections made will enable agent forwarding.
config.ssh.forward_agent = true
# Never sync the current directory to /vagrant.
config.vm.synced_folder ".", "/vagrant", disabled: true
checkout = "yes"
if ENV['CHECKOUT'] != 'y' then
checkout = "no"
end
config.vm.provider "hyperv" do |hv, override|
hv.memory = 2048
hv.linked_clone = true
if ENV['CHECKOUT'] != 'y' then
override.vm.synced_folder ".", "/home/vagrant/Nominatim", type: "smb", smb_host: ENV['SMB_HOST'] || ENV['COMPUTERNAME']
end
end
config.vm.provider "virtualbox" do |vb, override|
vb.gui = false
vb.memory = 2048
vb.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate//vagrant","0"]
if ENV['CHECKOUT'] != 'y' then
override.vm.synced_folder ".", "/home/vagrant/Nominatim"
end
end
config.vm.provider "parallels" do |prl, override|
prl.update_guest_tools = false
prl.memory = 2048
if ENV['CHECKOUT'] != 'y' then
override.vm.synced_folder ".", "/home/vagrant/Nominatim"
end
end
config.vm.provider "libvirt" do |lv, override|
lv.memory = 2048
lv.nested = true
if ENV['CHECKOUT'] != 'y' then
override.vm.synced_folder ".", "/home/vagrant/Nominatim", type: 'nfs', nfs_udp: false
end
end
config.vm.define "ubuntu22", primary: true do |sub|
sub.vm.box = "generic/ubuntu2204"
sub.vm.provision :shell do |s|
s.path = "vagrant/Install-on-Ubuntu-22.sh"
s.privileged = false
s.args = [checkout]
end
end
config.vm.define "ubuntu22-apache" do |sub|
sub.vm.box = "generic/ubuntu2204"
sub.vm.provision :shell do |s|
s.path = "vagrant/Install-on-Ubuntu-22.sh"
s.privileged = false
s.args = [checkout, "install-apache"]
end
end
config.vm.define "ubuntu22-nginx" do |sub|
sub.vm.box = "generic/ubuntu2204"
sub.vm.provision :shell do |s|
s.path = "vagrant/Install-on-Ubuntu-22.sh"
s.privileged = false
s.args = [checkout, "install-nginx"]
end
end
config.vm.define "ubuntu24" do |sub|
sub.vm.box = "bento/ubuntu-24.04"
if RUBY_PLATFORM.include?('darwin') && RUBY_PLATFORM.include?('arm64')
# Apple M processor
sub.vm.box = 'gutehall/ubuntu24-04'
end
sub.vm.provision :shell do |s|
s.path = "vagrant/Install-on-Ubuntu-24.sh"
s.privileged = false
s.args = [checkout]
end
end
config.vm.define "ubuntu24-apache" do |sub|
sub.vm.box = "bento/ubuntu-24.04"
sub.vm.provision :shell do |s|
s.path = "vagrant/Install-on-Ubuntu-24.sh"
s.privileged = false
s.args = [checkout, "install-apache"]
end
end
config.vm.define "ubuntu24-nginx" do |sub|
sub.vm.box = "bento/ubuntu-24.04"
sub.vm.provision :shell do |s|
s.path = "vagrant/Install-on-Ubuntu-24.sh"
s.privileged = false
s.args = [checkout, "install-nginx"]
end
end
end
================================================
FILE: data/words.sql
================================================
--
-- PostgreSQL database dump
--
SET statement_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET search_path = public, pg_catalog;
SET default_tablespace = '';
SET default_with_oids = false;
--
-- Name: word_frequencies; Type: TABLE; Schema: public; Owner: -; Tablespace:
--
DROP TABLE IF EXISTS word_frequencies;
CREATE TABLE word_frequencies (
word_token text,
count bigint
);
--
-- Data for Name: word_frequencies; Type: TABLE DATA; Schema: public; Owner: -
--
COPY word_frequencies (word_token, count) FROM stdin;
gooseberry 501
qew 501
coaster 501
lubecker st 501
georg st 501
napravlinii 501
r georges bizet 501
jr chang pan xian 501
1550 501
wellington dr 501
starii 501
lundy 501
polizeistation 501
railway rd 501
r st antoine 501
gril 501
wirtschaft 501
ripa 501
minsenv 501
espanya 501
woodend 501
suz 501
sternen 501
mattos 501
schaf 501
mcdonald cr 501
gove 501
cox rd 501
murta 501
fermata 501
agios nikolaos 501
rake 501
dra 501
desportivo 501
talbach 501
n water st 501
prisma 501
banff 501
prigorodnaia ul 501
haller st 501
kabinit 501
zuider 501
krymskaia 501
irlanda 501
patha 501
misery 501
pleasant dr 501
banannarkanin 501
westfild rd 501
giono 501
cree 501
krems 501
hiram 501
st g 501
elkins 501
cantone 501
macchia 501
mex 1 501
adana sanliurfa otoyolu 502
poziomkowa 502
isidore 502
n 117 502
bhyrte 502
camat 502
qili 502
pinecrest dr 502
uva 502
tbr 502
armstrong rd 502
c so giuseppe garibaldi 502
evergreen st 502
grushivskogo vulitsia 502
d 949 502
2190 502
macro 502
pampas 502
rollo 502
viaraya 502
upon 502
baker cr 502
muhlhauser 502
kalinowa 502
coille 502
malteser 502
57a 502
sh25 502
shchirbakova 502
solon 502
e 40 e 41 502
a37 502
veronese 502
lloyd st 502
fructuoso 502
oun 502
purdy 502
mcnair 502
aleflshmaleflyte 502
banja 502
huntsville 502
asti 502
hensley 502
e 451 502
ozira 502
avtomagazin 502
myru st 502
mundial 502
plum cr 502
l 530 502
wainwright 502
schreiber 502
whitefild 502
ul zoi kosmodimianskoi 503
prvomajska 503
carney 503
sh5 503
rispublika 503
grasweg 503
mosconi 503
vistula 503
mclaren 503
seminar 503
arral 503
doshkilnii 503
piani 503
alder st 503
cisco 503
oliver rd 503
mulas 503
taurus 503
tusday 503
honved 503
1 88 503
rosenheimer st 503
labattoir 503
bahama 503
wegkreuz 503
bicicletas 503
refinery 503
dechant 503
mckinley st 503
2111 503
320th st 503
castlereagh 503
doan 503
aleflshhdalefhamza 503
kliuchivaia ul 503
v lazio 503
qtalefr 503
baustoffe 503
krolowej jadwigi 503
ooster 503
blokker 503
963 503
246a 503
hage 503
baixada 503
albion st 503
orbita 503
shearwater 503
zhong hua lu 503
daisy ln 503
keian electric railway keian main ln 503
lewiston 503
amedee 503
caupolican 504
incheon 504
pitt st 504
lokomotiv 504
brandes 504
bejar 504
mcdonald rd 504
nippo 504
shoh 504
weseler st 504
armazem 504
sharaf 504
khy 504
c s sebastian 504
casetta 504
bridger 504
fisher st 504
53k 504
gotthard 504
kreisverband 504
romualdo 504
landbackerei 504
krm 504
j st 504
tryon 504
hubertusweg 504
haustechnik 504
panasa 504
backbone 504
smit 504
sommet 504
carroll st 504
hayes rd 504
miscelanea 504
bramante 504
carmes 504
rocky branch 504
hunyadi janos u 504
bei chuan 504
co rd 28 504
windwood 504
sindicato 504
hulshoff 504
iper 504
economy 504
lepinette 504
mynydd 504
velarde 504
wooded 504
thessalonikes 504
vazhinka 504
hangweg 504
huipyeonzzyx 504
stardust 505
judd 505
c granada 505
gr bd 505
211th 505
turkish 505
simion 505
d 177 505
stockholms 505
5a c 505
valia 505
n 14 505
curt 505
w end 505
erlengrund 505
firmin 505
dig 505
sp233 505
izumi 505
wheatfild 505
markets 505
doll 505
putri 505
biriozovi 505
banki 505
vini 505
ia 27 505
radica 505
church vw 505
hermano 505
a76 505
gospital 505
xxx 505
sp71 505
akazin 505
shared 505
fifth st 505
xiaono 505
durval 505
podlisnaia 505
d 927 505
cis 505
randstad 505
harsfa 505
lawrence av 506
gentle 506
mcquen 506
meadow c 506
gabrila narutowicza 506
paralia 506
nauchno 506
1047 506
orikhovaia 506
adalberto 506
d 929 506
balle 506
jjimjilbang 506
yayayyat 506
odenwald st 506
stoll 506
dortmunder 506
shay 506
ic 2 506
ca 66 506
s fernando 506
trek 506
penedes 506
regato 506
crouch 506
varshavskoi shossi 506
tulane 506
jewett 506
djebel 506
chemistry 506
her 506
poison 506
1013 506
cumberland rd 506
e 903 506
los robles 506
di5 506
fireside 506
r paul cezanne 506
longchamp 506
pastora 506
yakima 506
av general paz 506
abteilung 506
events 506
gyeongjeon ln 506
eira 506
beans 506
lexus 506
standart 506
chas 506
pab 506
a167 506
rauch 506
laureano 506
ap 9 506
konoba 506
mo a 506
wakefild rd 506
co rd e 506
koupali 506
nh30 506
uranus 506
pulku 506
tashkintskaia 506
gioberti 506
pree 507
adnan 507
shalefrain 3 507
arpents 507
mercearia 507
fazant 507
decima 507
tupper 507
seven 1 holdings 507
oak cr 507
1077 507
a470 507
g219 507
peterson rd 507
murchison 507
nibelungen st 507
ukrainska vulitsia 507
bernstein 507
dan in luan huang yuki ze gyeongbu exp s 507
cutter 507
landsborough 507
dust 507
unitarian 507
augenoptik 507
chacon 507
ozirna vulitsia 507
saglik 507
s ding mu 507
yhdys 507
mather 507
ewald 507
townline rd 507
prospikt stroitilii 507
tikhniki 507
s jorge 507
linhares 507
ponente 507
delft 507
comm ctr 507
croas 507
mackenna 507
athlone 507
us 30 alternate old us 330 507
kwiatkowskigo 507
esteves 507
zwickaur 507
1650 507
electrica 507
tasca 507
wurttembergische 507
dao107 507
slovenija 507
mt zion cemetery 507
hiriy 507
limbach 507
starego 507
mzhd 507
preta 507
milliken 507
edgard 507
tiga 507
us 42 507
conn 507
quy 508
geant 508
cavaillon 508
jiffy lube 508
vorosmarty u 508
pitrovskogo vulitsia 508
leopard 508
geneva subdivision 508
lebre 508
anderson av 508
33rd st 508
fourneau 508
v novara 508
woluwe 508
berea 508
stoneouse 508
heritage ln 508
cian 508
pelto 508
alzira 508
stifan 508
s342 508
kamianka 508
rodnichok 508
tx 289 508
okhrany 508
paracelsus 508
spas 508
soccorso 508
brookwood dr 508
las lomas 508
2055 508
donk 508
birches 508
tineretului 508
ecoponto 508
studentenwerk 508
chp 508
rua 16 508
gyeongjeon 508
tolstoi 508
sp70 508
pineridge 508
rouse 508
cowper 508
berens 508
neubaur 508
2040 508
salem church 508
general building 508
bite 508
hansens 508
2191 508
rosemead 508
coffe 508
khntrl 508
kazan 508
cameron rd 509
ani 509
howland 509
pojazdow 509
okmulgee 509
ligne de savenay a landerneau 509
frunzi ul 509
balefnkh mly 509
monteagudo 509
cent 509
wurm 509
dixi rd 509
iuzhnoi 509
barkers 509
r du ch vert 509
luxemburger 509
rope 509
swirczewskigo 509
kongo 509
cruceiro 509
azure 509
pommerai 509
maximilian st 509
hammerweg 509
mission rd 509
redondel 509
ufa 509
r des noyers 509
hanwa 509
furza 509
miller ln 509
arriaga 509
3500 509
stefana batorego 509
karbyshiva 509
mesa dr 509
porche 509
odisskaia 509
2210 509
certosa 509
masarykovo 509
d 618 509
rats 509
absa 509
carpenter rd 509
bellviw 509
tangenziale est 509
barren 509
shms 509
bai chuan 509
vang 509
akacfa 509
ocotillo 509
shvp 509
bradley st 509
tervuren 509
n 25 509
dactivite 509
penna 509
comm rd 509
mechelse stwg 509
bidv 509
r 10 510
verdon 510
av aristide briand 510
bluberry ln 510
bella vsta 510
kiosko 510
chon 510
b 191 510
caruso 510
taqwa 510
voronizhskaia 510
perle 510
huhangyong gaosu 510
m14 510
ballarat 510
sh 14 510
beija 510
talat 510
n mkt st 510
5 kvetna 510
trones 510
dao176 510
orono 510
ebers 510
av presidente vargas 510
manzanillo 510
aydin 510
infancia 510
zikenhuis 510
mangga 510
l 173 510
oficina de correos 510
farr 510
dalniaia ul 510
phahon 510
barber shop 510
pascoal 510
murs 510
krakow 510
tiatralnaia ul 510
mskhn 510
bessi 510
sunlight 510
odori 510
rn6 510
oakcrest 510
laderas 510
frindship church 510
lafayette av 510
goldene 510
ep20 510
huhangyong exp 510
teczowa 510
cerezos 511
kulinariia 511
vysokaia 511
garaze 511
meall 511
stairs 511
tsilinnaia 511
antik 511
karma 511
ukrainky 511
kajaanin 511
wacker 511
latour 511
linder 511
contre 511
buschweg 511
ptitsifabrika 511
privokzalna 511
ruines 511
k 67 511
b 184 511
shalefh 511
columbus st 511
ash gr 511
hms 511
2025 511
n cr 511
asrama 511
converse 511
steinbruchweg 511
ilinka 511
total accs 511
kastell 511
wilden 511
marly 511
eintracht 511
n76 511
keller st 511
hatar 511
e 314 511
brot 511
badgers 511
ptarmigan 511
channing 511
1105 511
negara 511
khristova 512
bliska 512
warrego 512
abadia 512
gibson rd 512
lambeth 512
comuna 512
r louis bleriot 512
3c 512
n 7th av 512
dial 512
popple 512
bighorn 512
winkl 512
republiky 512
beatrix st 512
piramida 512
rabelo 512
e maple st 512
grasse 512
kolk 512
b60 512
fu xing lu 512
leeuw 512
kasprowicza 512
rocket 512
pesantren 512
fabra 512
sotni 512
bezrucova 512
seegraben 512
piacenza 512
potoka 512
montoya 512
longmeadow 512
aparecido 512
p za roma 512
clove 512
cth n 512
newstead 512
zhudalg 512
chante 512
mav 512
daodasdakdabs 513
wangen 513
sp73 513
mshhd 513
tidewater 513
mizhraionnaia 513
tasty 513
haslach 513
rmlte 513
stell 513
vigny 513
melezes 513
chickamauga 513
standort 513
clayton rd 513
waldpark 513
oberlin 513
arroyos 513
r101 513
ze15 513
sivastopolskaia ul 513
pl de verdun 513
landgasthaus 513
rona 513
molise 513
jacint 513
rua onze 513
golden state fwy 513
westerly 513
di4 513
kuopion 513
1 476 513
trinity church 513
hales 513
bartley 513
guo daodasdakdabs hao 513
kayu 513
cr 39 513
food mart 513
schaferei 513
gorkogo st 513
llorenc 513
rameau 513
tresor 513
walter st 513
manson 513
koya 513
doolittle 513
mechanical 513
n gr av 513
ferial 513
thionville 513
sotsialnogo 513
larchen st 513
eckert 513
cevennes 513
secao 513
herrenhaus 513
polivalente 513
iss 514
n 322 514
obsluzhivaniia 514
r augu ste renoir 514
cordel 514
d 643 514
andras 514
kab 514
serge 514
ademar 514
holywell 514
lutter 514
boulay 514
ende 514
vozrozhdinii 514
blu cr 514
platanen 514
bootshaus 514
ulsan 514
av of saints 514
emirates 514
obecni urad 514
rapida 514
pentland 514
asc 514
pleasant hill church 514
morg 514
v dei pini 514
alexander of macedonia 514
p t 514
omsk 514
collettore 514
partizanski 514
l 136 514
lloyds tsb 514
chardonnay 514
st 9 514
vat 514
a df pl 514
olimpiiskii 514
hanover st 514
iturbide 514
golfe 514
1185 514
zhong yang zong wu huan xing xian 514
asp 514
waddell 514
colas 514
guadalquivir 514
chine 514
cottage ln 514
dzamija 514
pioneer dr 514
school number 1 514
amstel 515
aquileia 515
feld bg st 515
cypriana kamila norwida 515
boyd st 515
chiusa 515
hochwald 515
antistaseos 515
bluff rd 515
zhd 515
lastra 515
supercarretera 515
schleswig 515
broome 515
stapleton 515
hunger 515
malinovskogo 515
rn 2 515
alefmalefmzalefdh 515
sony 515
timoteo 515
anas 515
trio 515
wayne st 515
mekong 515
jatoba 515
hillwood 515
ljubljanska 515
groveland 515
mdkhte 515
natalia 515
paradise rd 515
radio shack 515
lamadrid 515
leiten 515
sidings 515
nowej 515
dorm 515
sainsburys local 515
miskii 515
tangerine 515
horny 515
arran 515
private dr 515
b 81 515
aspen ct 515
eifelautobahn 515
kharkovskaia 515
dominicana 515
e 18 ah8 515
savona 515
2070 515
brecon 516
benfica 516
tanka 516
kir 516
menotti 516
st johns cemetery 516
montseny 516
richnoi piriulok 516
harp 516
lupin 516
rua boa vsta 516
71a 516
piute 516
byn 516
cra 28 516
signature 516
xiao tian chuan 516
agraria 516
vvur 516
riqulme 516
volcano 516
shan yang dao 516
confederate 516
bold 516
colibris 516
miskas 516
sportu 516
kool 516
n 24th st 516
yum 516
tojo 516
1 66 516
td bank 516
hough 516
oak rdge rd 516
1s 516
collision 516
borngasse 516
d 820 516
birgit 516
cranbourne 516
devine 516
upt 516
pk bd 516
ostrovskogo vulitsia 516
cards 516
elio 516
sio 516
v cassia 516
simpson rd 516
swing 516
crowne 516
w chester pk 517
sdis 517
guo daodabsdabdak hao 517
sultana 517
rn2 517
hannibal 517
hackett 517
kholiittai bhiiddrbhng 517
av g 517
munch 517
detmolder st 517
yam 517
studinchiskaia ul 517
esportes 517
l 21 517
bhiiddrbhng 517
new r 517
mgdl 517
carson st 517
solnichni piriulok 517
mccloud 517
proliv 517
qua 517
n63 517
highschool 517
amadeo 517
d 220 517
jmy 517
daodabsdabdak 517
stadt graz 517
simona 517
sinagoga 517
siwa 517
texas av 517
okrzei 517
zong guan t lu 517
reten 517
stn depuration 517
spring branch 517
paja 517
dewberry 517
bloomingdale 517
dubki 517
20b 517
lyzhnaia 517
s pablo av 517
sheridan st 517
sevigne 517
tortuga 517
3115 517
lloyds bank 517
micala 517
teaching 517
poplars 518
rosemount 518
raba 518
neva 518
navasiolki 518
abilene 518
giambattista 518
aviator 518
wladyslawa jagilly 518
shhalefb 518
av 5 518
g 11 518
powell rd 518
kopalnia 518
palas 518
mdm 518
us 275 518
quasimodo 518
yothin 518
traurhalle 518
shorewood 518
vysoka 518
rak 518
qusada 518
inside 518
keepers 518
agropecuaria 518
atwater 518
strana 518
1113 518
aubrac 518
sophin 518
zinnia 518
cheonannonsan exp 518
jarv 518
cheonannonsan 518
villefranche 518
hlm 518
shang hai rao cheng gao su 518
sahil 518
culvert 518
859 518
rasen 519
pond st 519
g 7 519
resurrection 519
martir 519
nijverheids 519
iugra 519
wassermuhle 519
4500 519
08a 519
town hall 519
woodbine av 519
reseda 519
abid 519
ibiza 519
kniovna 519
dimitrov 519
r leon blum 519
bouillon 519
clearwater cr 519
worth st 519
vyhlidka 519
argun 519
moseley 519
shanghai ring exp 519
apolo 519
ferte 519
zoll st 519
that 519
olney 519
heywood 519
oakton 519
hashim 519
1170 519
alefltjnb 519
lormeau 519
arda 519
1 280 519
skoki 519
placeta 519
prinsen 519
rhodfa 519
hoyuk 519
kollataja 519
knooppunt 519
maisonneuve 519
arrigo 519
flowage 519
guarderia 519
rutgers 519
proyecto 519
n 3rd av 520
trans niderrhein magistrale 520
mazipi 520
zahir 520
t10 520
pleasant gr church 520
instytut 520
spolecznej 520
weimarer 520
veranda 520
yon 520
b 91 520
d 919 520
ss48 520
pionir 520
us 380 520
carpinteria 520
greenhills 520
homestead dr 520
visual 520
apricot 520
kasai 520
cuckoo 520
kemuning 520
cellar 520
arrayanes 520
1007 520
climat 520
wern 520
r des chardonnerets 520
matilda 520
983 520
berliner al 520
dan in xin gyeongbuseon 520
niki 520
vergel 520
autoroute jean lesage 520
edwarda 520
livi 520
chefferi 520
cliff rd 520
powstancow wilkopolskich 520
abraq 520
c s migul 520
2310 520
badgasse 520
bgn 520
ilse 520
tpu 520
gladstone st 521
janes 521
bernardi 521
vittime 521
taille 521
wisconsin central railroad 521
arodromio 521
boylston 521
jungbugosokdoro 521
r des artisans 521
coxs 521
abrams 521
zadni 521
1214 521
gau 521
blackwater r 521
seabrook 521
filding 521
childers 521
glowackigo 521
tsz 521
norden 521
wurttem 521
v 2 giugno 521
zalisi 521
burns rd 521
basler st 521
drinks 521
long rd 521
wells st 521
rinaldi 521
spotted 521
dinner 521
morristown 521
krolewska 521
giraud 521
pacifica 521
carrollton 521
autumn ln 521
griggs 521
lli 521
callahan 521
margaridas 521
r du pressoir 521
bumi 521
nuclear 521
faidherbe 521
mccarty 521
henderson st 522
unidocente 522
e 13 522
tudela 522
chinh 522
xi huang gao su 522
stanley av 522
ptu 522
k 66 522
bethleem church 522
lucknow 522
selim 522
guo dao8 hao 522
b 17 522
collegiate 522
r du ft 522
quen elizabeth wy 522
a d muhle 522
alkotmany u 522
32nd st 522
minster 522
docks 522
a wisengrund 522
sparse 522
b 255 522
us post office 522
d 218 522
turkestan siberia railway 522
rmk 522
teck 522
ring 2 522
kirchfeld 522
cth h 522
duncan st 522
druck 522
finances 522
sr 72 522
1450 522
oya 522
schnellfahrstrecke koln rh main 522
ug 522
amapa 522
dezesseis 522
o3 522
kifern 522
preparatoria 522
planetarium 522
alianza 522
35th st 522
hsl zuid 522
distretto 522
pokoju 522
burgenland 522
illa 522
pedemontana 522
anaya 522
zion church 522
clubhaus 522
gz 522
gerolamo 522
bydgoska 522
get 522
pazar 522
jester 522
hazen 522
robespirre 522
autoroute felix leclerc 522
bnsf railway 523
brande 523
tourist information 523
jing jiu xian 523
dwrbyn 523
fevereiro 523
ash av 523
tikkurilan 523
khudayr 523
guild 523
khana 523
urozhainaia ul 523
vesta 523
willow wy 523
remise 523
fco 523
like 523
azteca 523
harrell 523
parkhill 523
v monte rosa 523
scalinata 523
boite 523
amberley 523
carretas 523
dushana 523
pridorozhnaia 523
singing 523
tavistock 523
molodiozhni piriulok 523
sr 32 523
frati 523
volgograd 523
stn app 523
mujer 523
pl du champ de foire 523
collada 523
memorial pk 523
wolga 523
gaylord 523
crocetta 523
poul 523
chishma 523
d 603 523
larsen 523
endeavour 523
sportkompliks 523
bakeshop 524
av georges pompidou 524
piles 524
baylor 524
eurospar 524
tirheim 524
a 64 524
osterleden 524
piramide 524
frisen st 524
health ctr 524
golondrinas 524
colne 524
davis ln 524
silvestro 524
teja 524
kazanskaia 524
earle 524
stevens rd 524
keluarga 524
r jules gusde 524
breast 524
horizons 524
neu westbahn 524
uniwersytet 524
foxtail 524
phrrdhphlllng 524
petrol stn 524
maples 524
dawson rd 524
periwinkle 524
jlalefl 524
svoboda 524
mwqf 524
bidwell 524
snowsho 524
roure 524
dixon rd 524
basingstoke 524
sherman av 524
annas 524
varshavskoi 524
n 25th st 524
e14 524
nhs 524
malmo 524
cuiaba 524
halda 524
guo dao186 hao 524
ban ji dian t shen hu xian 524
drinking 524
849 524
rawhide 524
bernice 524
leroy merlin 524
chenevires 524
csarda 524
classroom 524
riddle 525
durant 525
petty 525
gong qian chuan 525
glades 525
windsor st 525
korner st 525
bland 525
chinquapin 525
xiantag 525
fresco 525
litva 525
rick 525
6000 525
druzhbi vulitsia 525
perito 525
o 52 525
sinopec 525
eurospin 525
c 49 525
ivanova 525
guter 525
st andrews rd 525
jarzebinowa 525
gourmand 525
mutter 525
bousqut 525
amarante 525
v matteotti 525
addington 525
pulai 525
ripon 525
kholm 525
expressa 525
observatorio 525
naturel 525
primax 525
caspian 525
immo 525
anggerik 525
badan 525
semi 525
teo 525
artinos 525
grist 525
stn service e leclerc 525
d 216 525
christiana 526
ostkustbanan 526
acacia ln 526
rzemislnicza 526
ager 526
kunterbunt 526
kastanin st 526
1 bruhl 526
palefyyn 526
rongwu 526
sinistro 526
dessau 526
morvan 526
acme 526
zimmerman 526
kozi 526
sharpe 526
z sport pl 526
brink st 526
hackney 526
dao54 526
marks spencer 526
ahon 526
wun 526
cr 42 526
eastwood dr 526
phetkasem rd 526
etap 526
albert einstein st 526
architecture 526
aleflalefswd 526
anvil 526
kashtanovaia 526
pappelallee 526
rais 526
anonima 526
maple cr 526
weid 526
btn 526
libero 526
southwind 526
contour 526
v francesco crispi 526
sodu g 526
opiki 526
s40 526
d 206 526
opshtina 526
zuoxhli 526
helms 526
vanessa 526
nordlicher 526
d 205 526
meteor 526
theodor storm st 526
jingha 526
mecklenburger 526
hangzhou ruili exp 526
national rt 42 526
deutschen 526
raiffaizin bank aval 526
copley 526
colombes 526
ainmalefr 526
lois ln 526
depanneur 527
skipton 527
candle 527
pine ct 527
scott av 527
s215 527
6th st n 527
miradouro 527
golf rd 527
nassau st 527
psj 527
bussteig 1 527
sr 73 527
pineurst dr 527
smolinskoi 527
r40 527
b 109 527
belmont st 527
mladost 527
3a c 527
r de stn 527
chateau deau 527
vostochni piriulok 527
mami 527
nimitz 527
nansen 527
smith cemetery 527
profissionalni 527
azalefdgalefn 527
pichler 527
stringer 527
kings r 527
feurbach 527
tanzschule 527
amal 527
sr 35 527
egan 527
beam 527
kiwanis 527
viwing 527
jizni 527
kuan 527
r 4 527
wohnbau 527
carrizo 527
longviw dr 527
berna 527
1 57 527
e 24 527
3011 527
prioziornaia 527
alpenverein 528
dagubusangan exp 528
se 15th st 528
gasoline 528
robinhood 528
tupac amaru 528
knowle 528
pracy 528
fiacre 528
b 93 528
petar 528
qullen st 528
fame 528
rt t 528
juniper ln 528
bdy st 528
hegi 528
l 78 528
bebe 528
dagubusangan 528
dantoni 528
chana 528
honor 528
beacon st 528
d 178 528
crown st 528
ss4 528
cra 26 528
gruben 528
touristiqu 528
heike 528
odilon 528
dvaro 528
kone 528
gall gall 528
amsel st 528
palefrq 528
jurija 528
bleus 528
geyer 528
thalia 528
dwr 528
mayberry 528
munitsipalni 528
pl dr 528
drink 528
tullys 528
c po 528
prairi av 528
keikyu main ln 528
tool 528
skelly 528
graduate 528
democracia 528
34th st 528
corning 529
itea antirrio 529
w madison st 529
pom 529
meter 529
brig 529
bazin 529
montpelir 529
permanente 529
paderborner 529
dmitra 529
credit mutul de bretagne 529
ruta nacional 3 529
lyndon b johnson fwy 529
almacenes 529
mubarak 529
glengarry 529
kelly st 529
r av 529
bca 529
geren 529
dakar 529
interamericana 529
st 2240 529
jing ha gao su 529
navchalnii 529
wp 529
albrecht durer st 529
caserta 529
nikolskii 529
quiteria 529
migul hidalgo costilla 529
grabowa 529
krasny 529
santambrogio 529
hagebau 529
morrison rd 529
lodewijk 529
dwyer 529
antwerpse stwg 529
old state rd 529
c madrid 529
pretoria 529
bash 529
mahmoud 529
krista 529
2 3 529
gorham 529
elim 529
forces 529
dempster 529
no name 529
bodo 529
dickey 529
amizade 529
outfitters 529
gurtel 529
gaviotas 529
cailloux 529
met 529
kal 529
savickaja vulica 529
ep15 529
clearviw dr 529
parish rd 529
epsom 529
altair 529
horsepen 529
he nei chuan 529
cr 41 529
atha 529
stonewood 529
besucherpark 529
scherer 529
khomeini 529
r mozart 529
l 73 530
temple st 530
st stefan cel mare 530
orwell 530
b 189 530
taha 530
purtas 530
gdn ln 530
tongu 530
portobello 530
muri 530
jovanovitsha 530
bipa 530
olimpiiskaia ul 530
chengkun ln 530
gisborne 530
ottica 530
gallen 530
rua paraiba 530
eastland 530
duclos 530
ul mindiliiva 530
tariq 530
nerudova 530
chenai 530
pez 530
athens thessaloniki evzoni 530
loring 530
klinge 530
crew 530
kharab 530
lakeridge 530
heung 530
volkova 530
editado por ivan arenas 530
mogilki 530
atv 530
karvej 530
vtoraia 530
ethnikes 530
arteaga 530
williams av 530
charanvincharanvinanjilinsan 530
r43 530
browns cr 530
oazis 530
boones 530
medellin 530
thibault 530
old us 330 530
chengkun 530
us 5 531
kandi 531
licenciado 531
geziret 531
howards 531
qumada 531
mirova 531
ashgrove 531
amapolas 531
wyli 531
bosse 531
facundo 531
errekea 531
c sevilla 531
reale 531
fukagawa 531
rua 13 de maio 531
nogura 531
langton 531
mibili 531
s228 531
edoardo 531
julitte 531
arthurs 531
stuart st 531
blumenau 531
bundesanstalt technisches hilfswerk thw 531
stellwerk 531
b 244 531
roti 531
bos ln 531
fomento 531
c s francisco 531
1134 531
sheridan rd 531
barba 531
fontane st 531
b 95 531
80n 531
haverhill 531
hohenzollern st 531
knigi 531
tilsiter st 531
jinshan 531
bellas 531
saddlebrook 531
purdu 531
magdalene 532
s ctr st 532
volontari 532
socita 532
pamiati 532
cinaga 532
dao311 532
r danjou 532
griffin rd 532
poirirs 532
ny g 532
popov 532
pomoshch 532
shuanghli 532
ul tsiolkovskogo 532
consulo 532
northwood dr 532
taitung 532
54a 532
mqr 532
allmend st 532
prumyslova 532
kaffee 532
r jacqus brel 532
holland rd 532
patrice 532
mt pleasant church 532
oaxaca 532
muskrat 532
v umbria 532
sh 82 532
d 163 532
tsin 532
frdwsy 532
nemocnice 532
ujezd 532
makarinko 532
nsr 532
co rd 31 532
lagar 532
cle 532
macarthur bd 532
kas 533
v della vittoria 533
horca 533
giron 533
hawthorne rd 533
ping ru gao su 533
jakes 533
ho hong luan huang yuki ze honam exp 533
marinkapelle 533
harvard av 533
rossiiskoi 533
1 35w 533
red oak dr 533
westelijke 533
1870 533
darmstadt 533
bronze 533
tyrone 533
liberazione 533
s224 533
yardley 533
wingfild 533
bozeny 533
2150 533
beausoleil 533
areas agricolas 533
noce 533
swm2 533
bakke 533
stavok 533
doorman 533
trakiia 533
i shi zi dong ch dao 533
shalefhd 533
sentir cotir 533
royd 533
badminton 533
corran 533
gondola 533
tradgards 533
october 533
h3 533
seccion 533
sherwood rd 533
severin 533
sp82 533
aunweg 533
meurthe 533
evesham 533
byrne 533
dogwood rd 533
n fork feather r 533
towarowa 533
editado 533
sman 533
zeus 533
achadh 533
gd 533
t15 533
feed 533
s61 533
buckner 533
gaspare 534
kuc 534
jeil 534
bouqut 534
eccles 534
mokyklos 534
6th av n 534
s agustin 534
ligne shinkansen sanyo 534
bayswater 534
jackson dr 534
disna 534
wenhua 534
chemi 534
sklady 534
jaune 534
psaje 4 534
duqusne 534
bakr 534
antena 534
church c 534
sanhardio sinkansen 534
dogwood st 534
scott dr 534
barqa 534
luar 534
prolitarska vulitsia 534
giro 534
kibitzweg 534
v delle rose 534
ho hong luan huang yuki ze 534
dan pi xin 534
lilinthal st 534
irvin 534
creation 534
hemlock ln 534
whittington 534
mem 534
success 534
pl du 19 mars 1962 534
beverly dr 534
long chuan 534
ind bd 534
tianjin 534
paradise ln 534
rrrnguuddh 534
marijke 534
mistleto 534
liberty av 534
french broad r 534
eglise notre dame de lassomption 534
rrrnguuddh uulllikorrngiireei 534
uulllikorrngiireei 534
pap 534
corts 535
marbach 535
sargento cabral 535
winter trl 535
shaffer 535
shane 535
securite 535
inspiration 535
korla 535
brugse 535
guillen 535
moveis 535
hitchcock 535
ridgeland 535
szanjo sinkanszen 535
1225 535
chia 535
schaffhauser 535
highpoint 535
footbridge 535
hells 535
odeon 535
w mkt st 535
westway 535
policlinica 535
s western main ln 535
masi 535
aspen ln 535
rua 15 535
mlynsky 535
szanjo 535
admiralty 535
bulldog 535
rua marechal deodoro 535
pizzas 535
bexley 535
yeo 535
bocaiuva 535
l 29 535
parkwood dr 535
yale univ 535
turin 535
schonaur 535
tawil 535
a 89 536
regio 536
lome 536
yayasan 536
giao 536
amour 536
around 536
davy 536
ainlmyn 536
parrot 536
lambs 536
nhw 536
sivirni piriulok 536
kustbanan 536
lida 536
ferruccio 536
hwn 536
falcon dr 536
commonwealth av 536
beyer 536
awg 536
ful stn 536
grossa 536
r13 536
neunkirchen 536
elise 536
dao309 536
gertrudis 536
bk st 536
br 316 536
oranje st 536
cochabamba 536
vtb 24 536
ivy st 536
muvelodesi 536
maraichers 536
gaucho 536
maybach 536
bilorusskaia 536
marcellin 536
indus 536
l 190 536
zhimchuzhina 536
mibilni 536
aleflnby 536
ellis rd 537
torrecilla 537
lindenwood 537
catharina 537
bryant st 537
cth e 537
rude 537
burton rd 537
kampweg 537
branchement 537
iowa st 537
loli 537
tualatin 537
102 qun 537
dao12 537
inst 537
gup 537
ibm 537
saverio 537
gharbiyah 537
al des peuplirs 537
tham 537
1082 537
onder 537
hani 537
badger cr 537
rio parana 537
piters 537
korinthos 537
parr 537
av 4 537
azalea dr 537
volia 537
rund 537
romans 537
2120 537
pk vw 537
consulado 537
turksib 537
n 4th av 537
margarethen 537
rayburn 537
schwartz 537
085 537
jackson cr 537
e 52 e 60 537
aras 537
rejo 537
landon 537
whrf rd 537
traube 537
av rd 537
us 44 537
parcheggio disabili 537
ss51 537
margit 537
carbonera 537
hakodate 538
xin dong ming gao su dao lu 538
b145 538
savane 538
gallagher 538
rodovia comandante joao ribeiro de barros 538
1091 538
desvio 538
thelma 538
a 104 538
ferguson rd 538
karczma 538
eunice 538
mudurlugu 538
kastoria 538
petru 538
mcdougall 538
kz 538
koto 538
rundwanderweg 538
aleksandar makedonski 538
pochinok 538
piu 538
masraf 538
lusine 538
nuri 538
generali 538
betania 538
tulsa 538
post ch ag 538
anderson cr 538
w 17th st 538
sry 538
fysl 538
d885 538
abdon 538
raritan 538
lenoir 538
wingert 538
kickapoo 538
salvia 538
vejlevej 538
1 67 538
ctra santander vinaroz 538
villares 538
huset 538
aleflmdrste 538
bugambilias 538
mure 538
capricorn 538
united states hwy 34 538
dg 538
jenner 538
ss17 538
fix price 538
state ln rd 538
ishun 538
bennet 538
puget 538
a 59 539
polici 539
conrado 539
voru 539
bateau 539
fels 539
polish 539
suryatlalefk 539
cr 46 539
026 539
nashua 539
overhill 539
flaubert 539
cardigan 539
seen 539
abukuma 539
grazhdanskaia ul 539
bricomarche 539
botro 539
l 140 539
meadowlands 539
usina 539
gerrit 539
s eastern main ln 539
l 361 539
fuzhou 539
vinzenz 539
kathryn 539
v s francesco dassisi 539
stalina 539
joubert 539
stocker 539
baleflalef 539
leipzig hof 539
misko 539
dempsey 539
64n 539
stockport 539
ky 80 539
prise 539
chabrowa 539
scizka 539
bono 539
twhyd 539
sp81 540
fees 540
400th 540
hedges 540
mechanic st 540
raabe 540
n31 540
c libertad 540
escanaba 540
ezers 540
grindstone 540
cab 540
rua orquideas 540
clothes 540
ss73 540
d 937 540
tirras 540
peking 540
798 540
flevolijn 540
pacific st 540
narzissenweg 540
butler rd 540
dufour 540
l4 540
l 151 540
tranquil 540
mayenne 540
ipanema 540
darsena 540
homburger 540
horns 540
jaagpad 540
vanguard 540
barbados 540
stocks 540
kayseri 540
pommern 540
villon 540
kiler st 540
importadora 540
militsii 540
windmuhlen 540
praspekt 540
alefljzyrte 540
rua j 540
pok 540
vegyesbolt 540
d 675 541
wuke 541
ditali 541
dimiana 541
almaty 541
dinamarca 541
dkhtralefnh 541
waldler 541
n 432 541
osinovka 541
rt yellowhead 541
ashbrook 541
speed camera 541
menengah 541
manara 541
michelbach 541
hessenweg 541
antigo 541
kalinina ul 541
r des sapins 541
boven 541
kuznichnaia 541
rudnik 541
aleixo 541
rafala 541
r ampere 541
bachelet 541
saraiva 541
michels 541
schellfischlini 541
cranford 541
r du chene 541
boing 541
ikhlas 541
menara 541
complanare 541
gellert 541
amer 541
r50 541
fo shan i huan 541
chenal 541
patuxent 541
arcangel 541
jose maria morelos 541
1036 541
jhalefd 541
phetkasem 541
lennon 542
biologiqu 542
proximite 542
frankston 542
direita 542
denizu 542
ygalefl 542
tirpark 542
adkins 542
ostsee 542
dezoito 542
snowden 542
firth 542
r 24 542
byaleflyq 542
arodromnaia 542
caffetteria 542
valls 542
stetson 542
goth 542
zwirki 1 wigury 542
scranton 542
celio 542
neisse 542
trotter 542
grenzgraben 542
whiteill 542
salguiro 542
loir 542
vvdas 542
l 39 542
donjon 542
e 234 542
v giuseppe parini 542
coupe 542
krutoi 542
hiper 542
corta 542
bazan 542
gave 542
msr 543
hancock st 543
l 163 543
sharps 543
perdido 543
n 601 543
kharbin 543
turkestan 543
hnos 543
magnoliia 543
produce 543
kerk ln 543
koster 543
cisterna 543
stephanus 543
av georges clemenceau 543
july 543
lobby 543
kert 543
av hipolito yrigoyen 543
monastere 543
integracao 543
caseros 543
saka 543
jdwl 543
espina 543
henriqus 543
solidaridad 543
palladio 543
subdivison 543
090 543
nzoz 543
muscat 543
meireles 543
wars 543
old r rd 543
nijverheidsweg 543
kaminica 543
lohe 543
national trust 543
tinistaia ul 543
maan 543
telepizza 544
c s pedro 544
roo 544
sinkanszen 544
tove 544
murmanskoi 544
carlota 544
utopia 544
autoteile 544
bjork 544
fayetteville 544
zilinii 544
brise 544
rayo 544
calade 544
mlyna 544
html 544
therme 544
grote st 544
svirdlova vulitsia 544
khvtsh 544
herrick 544
vins 544
khai 544
shalefrain 2 544
aaa 544
wittener st 544
s 15th st 544
manty 544
belmont rd 544
rodin 544
garros 544
w 18th st 544
buddy 544
pacinotti 544
shainbh 544
gaziantep 544
naif 544
reichenbacher 544
dorfbrunnen 544
zwijger 544
leu 544
eisenacher 544
harding st 544
bryson 544
zay 544
sandusky 545
laurel rd 545
r de provence 545
etos 545
stud 545
caridad 545
rudy 545
tonga 545
fosters 545
hyland 545
cr av 545
szabadsag ter 545
charcuteri 545
g110 545
fischerweg 545
xinjiang 545
d 191 545
archery 545
stanislawa wyspianskigo 545
n 8 545
tamagawa 545
us 56 545
alpenblick 545
crossings 545
torretta 545
weinstube 545
anello 545
mapleton 545
rua da igreja 545
035 545
thomas muntzer st 545
conquista 545
sntr 545
fusilles 545
2031 545
d 224 545
pl des tilleuls 545
nasi 545
tenerife 545
greensboro 545
cela 545
streda 545
barnes rd 545
schoner 545
dekra 545
l 200 545
great clips 545
tejo 545
escola mun de ensino fundamental 545
graig 545
valenciana 545
ulivi 545
4a c 545
cecilio 545
shaheed 545
b 254 545
cra 25 545
sta elena 545
cementerio mun 545
automat 546
farmaci 546
ponent 546
persian 546
d 210 546
s central av 546
hov 546
slack 546
alpine dr 546
gesundheitszentrum 546
hofmark 546
rittergut 546
shan yang dian qi t dao ben xian 546
municipales 546
seoulogwaksunhwangosokdoro 546
mcra 546
74a 546
taylor dr 546
osterfeld 546
oziorni 546
c h 546
botaniqu 546
livres 546
fancy 546
caseys general st 546
movi 546
altona 546
ars 546
balance 546
travail 546
kapsalon 546
strani 546
staufen 546
bigelow 546
sip 546
flagstone 546
medersa 546
podlesna 546
4010 546
cuneo 546
lowery 546
rn 11 547
dawes 547
horou 547
brown av 547
stjepana 547
c 52 547
clifton rd 547
testa 547
lugano 547
wladyslawa broniwskigo 547
bight 547
venizelou 547
qnp 547
andreu 547
k 65 547
ransom 547
kostelni 547
hofgarten 547
jumping 547
las vegas 547
dennen 547
primarschule 547
miniature 547
neris 547
guo dao53 hao 547
s36 547
lidia 547
padiglione 547
farhan 547
reed rd 547
bryd 547
hart st 547
salz st 547
couronne 547
dan in luan huang yuki ze gyeongbu exp n 547
capao 547
sp62 547
bellerive 547
rn34 547
pommir 547
dama 547
christians 547
guo daodabdamdang hao 547
fakultesi 547
sportivna 547
middel 547
dani 547
las vinas 547
rua rosas 547
elgin st 547
255th 547
juri 547
50 st 547
circulation 547
parka 547
cliffe 547
av principal 547
stoneleigh 547
m21 547
reza 547
bordj 547
alter weg 547
e mkt st 547
pluit 547
l 15 548
brewers 548
montagna 548
angostura 548
ze14 548
blaze 548
s338 548
maasdijk 548
venn 548
centrul 548
roccolo 548
tamarac 548
alefbyb 548
coldstream 548
woodmere 548
alessandria 548
edgewood rd 548
r des forges 548
traiteur 548
ul vorovskogo 548
stotis 548
ch des pres 548
biblioteca mun 548
pecanha 548
populiren 548
l 74 548
caselle 548
moa 548
piatra 548
sondergade 548
rosebank 548
pravda 548
toa 548
esteve 548
tanyard 548
a45 548
d 323 548
meadow ct 548
ul bogdana khmilnitskogo 548
martin luther king 548
bunting 548
cumberland st 548
suur 548
kempen 548
a96 548
dellappennino 548
waldsidlung 548
ch du chateau 548
antona 548
a 94 549
hilal 549
bundesanstalt technisches hilfswerk 549
patron 549
s 40 549
vezer 549
c po de futbol 549
rockville 549
lanza 549
seoul ring exp 549
waldheim 549
calzados 549
pinedale 549
pirates 549
anyar 549
raduzhnaia ul 549
optima 549
macia 549
marl 549
etela 549
ferraris 549
rousse 549
dillard 549
clubhouse dr 549
herr 549
savino 549
khaled 549
k 68 549
heine st 549
first church of christ scintist 549
malina 549
dincendi 549
sik 549
b 30 549
rn38 549
65a 549
ingleside 549
1a c 549
pogranichnaia ul 549
tallinna 549
koninginne 549
sobral 549
n33 549
landscape 549
xiang gang you zheng hong kong post 549
ck 549
vercelli 549
puglia 549
medival 549
talca 549
waldfriden 549
stivana 549
zhongshan rd 550
coburn 550
strait 550
federal hwy 550
bunny 550
antrim 550
khralefyb 550
dao18 550
cintura 550
melba 550
reinigung 550
bogdan 550
semmelweis 550
odd 550
sackville 550
benin 550
auto del sur 550
zwembad 550
khmys 550
kalefml 550
1112 550
nahkauf 550
diqu 550
prtco 550
hbnym 550
daodabdamdang 550
rua sta luzia 550
paschi 550
jin chuan 550
collina 550
grobla 550
petanqu 550
duren 550
rsaleflt 550
bergische 550
xiandal 550
barsuki 550
l 116 550
jenni 550
ind rd 550
scar 550
badweg 550
robinwood 550
r marcel pagnol 550
oak gr rd 551
jerrys 551
ze16 551
nair 551
guo dao19 hao 551
lir 551
v giovanni boccaccio 551
charcoal 551
mornington 551
banamex 551
sadova st 551
korczaka 551
ulianova 551
airlines 551
acqu 551
bernat 551
hickey 551
race st 551
sayh 551
tanager 551
lidicka 551
kholiittai 551
nh9 551
clinico 551
fairviw cemetery 551
febbraio 551
corr 551
filles 551
neukirchen 551
ch du lavoir 551
sap 551
a 48 551
kasteel st 551
horcajo 551
b52 551
sykes 551
warsaw 551
giochi 551
zhkkh 551
ul gaidara 551
coles express 551
druckerei 551
bermudez 551
av sao paulo 551
career 551
s222 551
antero 552
superstrada 552
faisal 552
ledesma 552
pitrova 552
jeune 552
diving 552
acevedo 552
wormser 552
g15w 552
cisowa 552
kuytun 552
papen 552
bartholomew 552
prolitarska 552
shasha 552
valta t 552
39a 552
duncan rd 552
artima vulitsia 552
pitrovka 552
r du tilleul 552
clive 552
n 2nd av 552
dezenove 552
r du viux moulin 552
a d bahn 552
r centrale 552
pisacane 553
huffman 553
tunguska 553
renfrew 553
quiktrip 553
gongke 553
984 553
escondida 553
jewellery 553
doon 553
3300 553
latorre 553
corrado 553
falefdl 553
nhm 553
lougheed hwy 553
eren 553
guadarrama 553
gimnazium 553
chanhlu 553
hoher weg 553
mapa 553
windemere 553
r st nicolas 553
breil 553
dinkey cr 553
donnelly 553
zwaluw 553
dotoru 553
syh 553
v stambanan 553
krupp 553
paliw 553
n broad st 553
olive gdn 553
amphitheater 553
350th 553
mannerheimin 553
diga 553
w maple st 553
europea 553
rance 553
danske 554
pinfold 554
shang yu xian 554
gigante 554
don bosco 554
sycamore cr 554
dekalb 554
hsynyh 554
monastir 554
raqul 554
maiakovskogo vulitsia 554
shhdalefy 554
qasim 554
rwe 554
wug 554
laveri 554
albeniz 554
capanna 554
bethel cemetery 554
r 256 554
hausen 554
ctt 554
other 554
sibirskaia ul 554
ruta nacional 14 554
fasanen st 554
orchidees 554
brooks rd 554
fridays 554
riz 554
v mazzini 554
al des chenes 554
brodi 554
ribbon 554
guo daodasdakdass hao 554
thuringer st 554
schonblick 554
defence 554
westerplatte 554
daodasdakdass 554
w state st 554
stearns 554
aleflsryainte 554
zachary 554
n jefferson st 554
valletta 554
vantage 554
geary 554
890 554
arch st 554
cuil 554
hurontario 554
baross 554
pow 555
lerma 555
loise 555
washington rd 555
picton 555
neptun 555
maxime 555
1212 555
amanecer 555
avtozimnik 555
sudhang 555
prevost 555
pawn 555
geranium 555
auto de mediterrania 555
bourse 555
wheatsheaf 555
alimentacion 555
kupang 555
kincaid 555
leatherwood 555
v tevere 555
traktovaia ul 555
sp92 555
economia 555
cathy 555
martin dr 555
woodroffe 555
paddington 555
tinker 555
deerfild dr 555
onibus 555
lombardo 555
glenfild 555
mtn av 555
jordao 555
poz 555
airy 555
lothar 555
natale 555
1035 555
zagorodnaia ul 555
marjori 555
modas 555
knightsbridge 555
las rosas 555
jordan rd 555
liningradskii 555
volks 555
millstream 555
virrey 555
shinjuku 555
salar 555
barnabas 555
c paz 555
vegetable 555
marten 555
salvator 556
kinizsi 556
pavlovka 556
dabrowka 556
cervera 556
n scottsdale rd 556
jula 556
passa 556
davis cr 556
busto 556
886 556
pors 556
b23 556
cromer 556
kidul 556
hali 556
flstyn 556
mahon 556
evangelist 556
magnit kosmitik 556
a300 556
58a 556
jas 556
mollard 556
meisen 556
crepe 556
leonard st 556
vrede 556
microrregiao 556
prospero 556
khngngpsnsdddhlllg 556
hosok 556
rungkut 556
almaden 556
jeovas 556
biltmore 556
caswell 556
dpd 556
pawnshop 556
berzu 556
heck 556
garrido 556
consejo 556
portella 556
st 10 556
101 qun 556
ita vla 556
herenweg 556
v flaminia 556
trafford 556
jacki 556
tranquility 556
04 22 556
baywa 556
town open space 557
berga 557
b 35 557
old farm rd 557
khor 557
grenville 557
ul novosiolov 557
kalan 557
hopfengarten 557
cottage st 557
b 455 557
druid 557
ss115 557
a350 557
sabin 557
kochi 557
castellar 557
r verte 557
cerrillos 557
terrir 557
mlodzizowa 557
l 10 557
abruzzese 557
thumb 557
aleflmtalefr 557
damour 557
obaga 557
rigel 557
oc 557
b 462 557
buna vsta 557
spider 557
ss35 557
huasenv 557
kaminnaia 557
chirvonoarmiiska vulitsia 557
us 410 557
us 91 sr 18 557
gateway dr 557
r de normandi 557
silskogo 557
r jean monnet 557
malek 557
ivroopt 557
bann 557
arnika 557
fu in gao su 558
damaschke 558
bedford st 558
hermon 558
v antonio vivaldi 558
vous 558
chartwell 558
fear 558
maltings 558
ferri 558
heathcote 558
wybudowani 558
wheeler rd 558
nadrzeczna 558
mhaleffzte 558
cerezo 558
gilbert st 558
roseland 558
c dr fleming 558
tela 558
c g 558
kami 558
noronha 558
herndon 558
cadiz subdivision 558
esquinas 558
aussichtspunkt 558
vignoble 558
al nipodleglosci 558
elm ct 558
daphne 558
cantos 558
grind 558
r 5 558
mysliwska 558
d 942 558
mooney 558
belvidere 558
venetian 558
1131 558
sannitico 558
hutt 558
steinmetz 558
roku 558
powell st 558
nova poshta 2 558
vire 558
karla marksa st 558
av de liberte 558
scintifico 559
duin 559
hayes st 559
davis av 559
pokrovskii 559
pl du chateau 559
jakobs 559
andromeda 559
oak hill rd 559
wuppertal 559
florianopolis 559
cripple 559
moors 559
argonne 559
poitirs 559
imports 559
holbein 559
linne 559
geoje 559
ji yan gao su 559
c s isidro 559
iris st 559
travellers 559
auto del cantabrico 559
chambery 559
nato 559
sirena 559
pl de toros 559
bavaria 559
bourke 559
d 219 559
tsara 559
pr bernhard ln 559
ekonom 559
church of nazarene 559
799 559
etats 559
vermeer 559
edmonds 559
chantemerle 559
whiteorse 559
newington 559
voortrekker 559
vereinshaus 559
b 32 559
wildwood ln 559
ayr 559
cory 559
o 4 559
chrzcicila 559
stern st 559
salute 560
las flores 560
midland hwy 560
nc 24 560
55a 560
phillips st 560
s marcos 560
heil 560
magistrala weglowa 560
donskoi 560
quensland 560
ravintola 560
giusto 560
marini 560
crenshaw bd 560
tub 560
tubingen 560
ludal 560
l 288 560
m 19 560
spoor st 560
monitor 560
baroni 560
kalvaria 560
horses 560
svitog 560
vegetarian 560
nevers 560
windsor ct 560
tilos 560
e 421 560
burnley 560
gregoriou 560
henning 560
r de leurope 560
psmar 560
af 560
gregor 560
peripheral 560
antal 560
ladopotamos 560
wody 560
mai dang lao 560
signora 560
laituri 560
nelly 560
svalka 560
kandang 560
coty 560
livio 560
puro 560
blk 2 560
vinschgaur 560
c 65 560
kantonalbank 560
dimas 561
fink 561
applid 561
yanzhiwu 561
officers 561
aoki 561
gradska 561
lesne 561
inga 561
heilbronner st 561
sid 561
d 917 561
columbus av 561
barbiri 561
melia 561
beech rd 561
whitworth 561
besson 561
shmvrt 561
kuznitsova 561
hands 561
fino 561
huan ba tongri 561
yanzhiwu exp 561
baise 561
irene st 561
gosudarstvinnogo 561
himmelreich 561
jackass 561
rubis 561
massachusetts tpk 561
lohr 561
deer run 561
sheetz 561
c 47 561
bussardweg 561
carriage ln 561
plenty 561
harrison rd 561
walt 561
msainwd 561
leben 561
yan zhi wu gao su gong lu 561
a 63 561
impala 561
coyote cr 561
pando 561
moksha 561
konya 561
alexander rd 561
tourismus 561
virag 561
gauss 561
cassidy 561
hama 561
sharm 562
wolters 562
luga 562
mersin 562
chestnut ln 562
ring 1 562
pilas 562
3s 562
bahntrassenradweg 562
malmin 562
q jia 562
hilliard 562
held 562
consolidated 562
johann sebastian bach st 562
tg 562
algeri po ste 562
periphereiake odos 562
pizza express 562
hawthorne dr 562
panhandle 562
mitsui 562
kendo 562
gatewood 562
slim 562
garnett 562
bure 562
adriatico 562
jingzhu exp 562
d 619 562
199th 562
d 840 562
fontenelle 562
waldsee 562
rheintalbahn 562
assiniboine 562
planas 562
betsy 562
48a 562
piraus 562
piton 562
zmaj 562
hamam 562
despagne 562
sfr 562
alder cr 562
paynes 563
u haupt st 563
chongqing 563
valk 563
bagutte 563
oulad 563
olympus 563
uslug 563
gurre 563
nghia 563
voinov 563
gruppa 563
lauberge 563
15n 563
lancaster rd 563
deventerweg 563
associazione 563
r du marche 563
khngngnynnrnnlddgvai 563
n 330 563
damen 563
koblenz 563
89a 563
wels 563
tbain 563
schulbus 563
hollins 563
1141 563
fest pl 563
clairire 563
japon 563
springwater 563
gr13 563
upc 563
pipeline rd 563
n ctr st 563
autostrada dei trafori 563
mikhaila grushivskogo vulitsia 563
filmann 563
petsmart 563
bourges 563
kirsch 563
brune 563
jong 563
ivanovskoi 563
v xxiv maggio 564
kron 564
ruta provincial 11 564
huidu 564
hutchison 564
e 762 564
rheinland 564
superiure 564
dok 564
metzger 564
tumulo 564
sparte 564
castelnuovo 564
nabirizhni 564
commanderi 564
rd 1 564
whistler 564
rib 564
terzo 564
krasna 564
hayfild 564
imp des jardins 564
strawberry ln 564
dinamo 564
r st michel 564
merrimac 564
paroquial 564
travessera 564
jagodowa 564
phra 564
bw 8 564
checkpoint 564
markgrafen 564
uptown 564
narita 564
ze20 564
ready 564
toc 564
eglise st etinne 564
toulon 564
diamantina 565
vrtic 565
pidagogichiskii 565
cervino 565
krainiaia 565
emporio 565
vincents 565
aliksandar makidonski 565
d 468 565
randolph st 565
trafori 565
maschinenbau 565
fantasy 565
belanger 565
r alphonse daudet 565
plantation dr 565
sw st 565
salter 565
harewood 565
damiao 565
mili 565
zacarias 565
c 58 565
bei lu dao 565
drumheller 565
r des fosses 565
nid 565
203rd 565
deken 565
r10 565
buurtweg 565
spanin 565
duck cr 565
alefyylvn 565
residentialarea 565
schilling 565
wasen 565
g7 565
donskaia 565
sr 42 old sr 10 565
quntuop 565
shokoladnitsa 565
popovka 565
vladimirescu 566
bildungszentrum 566
stover 566
arta 566
deesilla 566
khshalefwrzy 566
akademia 566
zeeman 566
burrito 566
szkola podstawowa 566
sesto 566
ryan rd 566
suk 566
bhr 566
1950 566
aurrera 566
banksia 566
c s roqu 566
kuria 566
aromos 566
luang 566
dao186 566
escape 566
phyllis 566
tab 566
forages 566
zrodlana 566
marmol 566
vive 566
3102 566
dancing 566
batavia 566
ep9 567
elzen 567
bagley 567
parkfild 567
kors 567
ul zhukovskogo 567
picacho 567
kitchens 567
mbtsain 567
gobel 567
n90 567
oberen 567
rundkurs 567
royce 567
s305 567
wi 32 567
g321 567
r des vosges 567
lugova vulitsia 567
costa rica 567
n 134 567
v magenta 567
corey 567
v giovanni amendola 567
cuirt 567
hamadi 567
pitka 567
central pk 567
marata 567
garvey 567
bogoroditsi 567
cm 412 567
bathurst st 567
mahendra hwy 567
granary 567
lyautey 567
imia 567
yayla 567
3111 567
walsall 567
tilden 567
earl st 567
2115 567
boni 567
autonoma 567
wilson dr 567
falkenstein 567
qadim 568
essex st 568
pfarr st 568
kinderspil 568
jnc rd 568
meix 568
ambar 568
poso 568
987 568
hussein 568
baraji 568
holly rd 568
1115 568
kazachia 568
anhalt 568
carnarvon 568
brookstone 568
h r blk 568
s311 568
si guo zong guan zi dong ch dao 568
pinturas 568
fach 568
mowbray 568
ladder 568
bamiyan 568
028 568
mylly 568
rindo 568
hallam 568
baitul 568
ch de chapelle 568
19b 568
st georg 568
2d 568
laurel cr 568
v giovanni verga 568
hjr 568
souris 568
loveland 568
simpson st 568
mudrogo 568
beale 568
hornbach 568
v brescia 568
elektrotechnik 568
romualda traugutta 568
wayland 568
d 918 568
johnson dr 568
ivey 568
sviatitilia 568
frg 568
r de bourgogne 568
lh 568
botany 568
agadir 569
agion 569
integrated 569
milne 569
guo dao11 hao 569
nstrn 569
onda 569
beobia 569
dublin rd 569
chastni 569
patel 569
ishikarigawa 569
khoziaistvinni 569
longfild 569
aumailngkrdhrrngkko 569
pobidy ul 569
bunder 569
skrzyzowani 569
kuros 569
chiuahua 569
vidin t 569
daycare 569
vignerons 569
bartolome mitre 569
dade 569
phil 569
e 272 569
16b 569
aubrey 569
d 181 569
223rd 569
3002 569
dres 569
zapote 570
zamecka 570
amadeu 570
chop 570
camper 570
meric 570
1720 570
b 465 570
taleflb 570
l 1140 570
laut 570
shakhta 570
thatcher 570
us 66 old us 99 570
nautico 570
jokai u 570
anges 570
qlyb 570
shoprite 570
b 471 570
than 570
alderwood 570
precision 570
m 40 570
varidades 570
rua da paz 570
adel 570
livanivskogo 570
jamil 570
d 974 570
tolbukhina 570
fistivalnaia ul 570
oakes 570
v degli alpini 570
juniper st 570
sp78 570
slauson 570
52a 570
ma 28 570
johnson ln 570
vaio 570
laporte 570
t16 570
js 571
chartreuse 571
dinfanteri 571
abbot 571
gure 571
e 18th st 571
v cantonale 571
eo7 571
mississauga 571
e 21st st 571
randy 571
c sol 571
poinciana 571
komeri 571
midwest 571
r du 8 mai 571
tampico 571
g323 571
walpole 571
ameghino 571
tompkins 571
macao 571
beek st 571
n 301 571
romao 571
lamarmora 571
v della chisa 571
bina 571
fd 571
blus 571
hickory rd 571
wigwam 571
sandgrube 571
folwark 571
ctra de madrid 571
notaria 572
quiznos 572
irineu 572
dolly 572
cabras 572
maitre 572
arnold st 572
fisk 572
vysokoi 572
b 431 572
chapin 572
gilead 572
kharkivska 572
bluwater 572
engelbert 572
winkel st 572
jeanette 572
hanger 572
centra 572
guss 572
s207 572
ep10 572
veerweg 572
nevado 572
platane 572
summit rd 572
progriss 572
gavilan 572
abbud 572
tura 572
e church st 572
bayerische 572
varas 572
rovnsutoa100 572
gabelsberger st 572
yau 572
planning 572
pret 572
stubbs 572
tetto 572
milton rd 572
union church 572
lamp 572
stantsii 572
buchanan st 572
rosenheim 572
pickens 572
r des ormes 573
mt auk branch 573
dolce vita 573
synalef 573
systeme u 573
mcguire 573
dom byta 573
6362 573
n 9 573
tsintar 573
vinaroz 573
tumbleweed 573
r louise michel 573
whitestone 573
rito 573
grafen 573
amins 573
univ bd 573
av parana 573
depositos 573
erdo 573
kortrijk 573
cra 27 573
kulz 573
rhine 573
kbc 573
associations 573
wallace rd 573
mark st 573
spil pl 573
cevre 573
v pasubio 573
eugeniusza 573
higuras 573
r des carrires 573
pancake 573
v sta lucia 573
alefbrhm 573
lituvos 573
riverton 573
charme 573
bakar 573
keolis 573
hory 573
is rd 573
blu trl 573
chester st 573
centennial dr 573
liningradskoi shossi 574
massachusetts av 574
cornet 574
hato 574
karntner 574
idlewild 574
aksu 574
zhuno 574
combs 574
rmt 574
trevor 574
danji 574
e ctr st 574
m52 574
sano 574
gabrille 574
overflow 574
private sect name no 574
ivrea 574
local private sect name no 574
bifurcacion 574
bearn 574
us 3 574
mnkhm bgyn 574
carro 574
a414 574
orellana 574
distrital 574
khmelnytskoho 574
doran 574
national rt 13 574
wlkp 574
2600 574
jr kagoshima honsen 574
s312 574
sagamore 574
stresemann st 574
verreri 574
niftibaza 574
se st 574
s wales main ln 574
mhlh 574
section 3 574
e 801 574
bild 575
rozen st 575
leuvense stwg 575
kopi 575
goa 575
chemnitzer st 575
birizka 575
tanners 575
schumann st 575
baudelaire 575
josef st 575
sault 575
nivo 575
kuwait 575
hmalefdy 575
riachulo 575
klinovaia 575
suka 575
galitskogo 575
lynn st 575
ainalefmr 575
pikin 575
sh7 575
brad 575
tanneri 575
halstead 575
bloor 575
buissons 575
cocina 575
yang an t lu 575
glavnaia 575
b 203 575
fuchsweg 575
chantry 575
covadonga 575
vody 575
ft st 575
bradford rd 575
chancery 575
veteran 575
n52 575
208th 575
nang 575
inspection 575
boro 575
virkhniaia ul 575
mita 575
g111 575
kea 1 575
tran 575
d 159 575
infirmary 575
1130 575
reit pl 576
r pirre brossolette 576
senioren 576
trucks 576
yukun exp 576
pyeong qigyakhli luan huang yuki ze 576
troitskaia 576
vorder 576
av f 576
zhong yang xian 576
caddo 576
d 606 576
eclipse 576
aurbach 576
kostiol 576
av du marechal leclerc 576
yukun 576
b 209 576
ebe 576
ikot 576
dich 576
shipley 576
s sebastian 576
colors 576
samarkand 576
toronto district school board 576
muan 576
ting1 576
tournai 576
856 576
qigyakhli 576
bayda 576
ashcroft 576
jose hernandez 576
balbin 576
pitrol 576
klettersteig 576
cordelirs 576
nau 576
daily yamazaki 576
steingasse 576
d 215 576
tongyeong 576
lerdo 576
3106 576
cataluna 576
co rd 30 576
n21 576
holzbau 576
us 131 576
linii 576
ep16 577
aleksandrowka 577
lalef 577
cercado 577
f2 577
transformator wizowy 577
vecchi 577
ostergade 577
chapaiva ul 577
flow 577
bard 577
smak 577
aleflbnk 577
balcarce 577
daquitaine 577
reformhaus 577
aix 577
stredisko 577
csapos kut 577
lp 8 577
jabir 577
ddhi 577
williams cr 577
kecil 577
admin 577
shale 577
frind 577
kalk 577
seidel 577
burger st 577
locust av 577
wilhelm busch st 577
synagoge 577
pong 577
frituur 577
passion 577
yu in luan huang yuki ze 577
carlsbad 577
dorozhni 577
odvojak 577
marii sklodovskoi kiuri vulitsia 577
e 125 577
janvir 577
r des tulipes 577
pleasure 578
a 41 578
lituva 578
2027 578
967 578
dzialkowe 578
porter rd 578
nahon 578
estuary 578
poinsettia 578
w jefferson st 578
huong 578
haharina 578
condamine 578
maybank 578
prunus 578
sr439 578
landshuter 578
akushirskii 578
sklodovskoi 578
v st 578
b 43 578
hopfen 578
manso 578
nh47 578
dong jiu zhou zi dong ch dao 578
najswitszego 578
autov del norde ste 578
2610707 578
milutina 578
eschen 578
pine rdge rd 578
shaurma 578
abdellah 578
kop 578
kepala 578
calzado 578
voronizh 578
roxas 578
firm 578
epulet 579
rua palmeiras 579
stockbridge 579
d 996 579
mallard dr 579
manaus 579
l 523 579
wendel 579
st 2244 579
coudray 579
lanark 579
buk 579
n 430 579
n 1st av 579
badi 579
union cemetery 579
brook rd 579
us 66 historic 579
hunyadi u 579
bruckenweg 579
northbrook 579
carrira 579
luki 579
a65 579
cavallo 579
dalefwd 579
sovkhoza 579
issa 579
meike 579
sp61 579
40th st 579
safra 579
elmwood dr 579
blackberry ln 579
melchor ocampo 579
pale 579
alpha bank 579
malinovaia 579
kosmitik 579
arantes 579
wizowy 579
bilac 579
papineau 579
marlene 579
viljandi 579
pilone 579
ep11 579
dourado 579
eyth 579
dari 579
mercadinho 580
minister 580
huan qi tongri 580
rollin 580
stadtwald 580
host 580
bernabe 580
denia 580
vorm 580
umgeungs st 580
hshtm 580
jagdhutte 580
ultra 580
studi 580
cerny 580
pitrovskoi 580
alefy 580
bogen st 580
lapin 580
battaglia 580
r grande 580
verdugo 580
gezelle 580
nanarupusu 580
reconquista 580
frontenac 580
damon 580
pomeroy 580
ctra de gijon a sevilla 580
himalaya 580
muhl bg 580
r des frenes 580
trot 580
students 581
mascarenhas 581
tsintralni rynok 581
pinho 581
polyvalent 581
tite 581
santiago del estero 581
e 871 581
garii 581
tuba 581
uss 581
st 8 581
meri 581
samgeori 581
35w 581
viajes 581
locust ln 581
csapos 581
surprise 581
gottinger 581
05 23 581
socidade 581
oliver st 581
b 170 581
coleridge 581
rampart 581
pionirskii piriulok 581
binder 581
krzysztofa 582
larrea 582
wilhelmina ln 582
young rd 582
douane 582
ul dimitrova 582
hebel 582
heatherwood 582
agenzia 582
torrens 582
ermine 582
e 803 582
2a av 582
diba 582
d 960 582
crawley 582
barge 582
obligado 582
zetkin 582
c del sol 582
mdyryte 582
sivastopolskaia 582
parku 582
navoi 582
d 948 582
r de prairi 582
karlsruher st 582
liniinaia ul 582
ss62 582
chuck 582
calvary baptist church 582
superiur 582
wynn 582
mein 582
frhng 582
chartered 582
zhi jian chuan 582
chennai 582
st nikolaus 582
vendeglo 582
potable 582
roos 582
fox st 582
kurfursten 582
central exp 582
tisserands 582
worship 582
appulo 583
olaf 583
planalto 583
ser 583
a t u 583
recife 583
republicii 583
amancio 583
coria 583
yongin 583
galveston 583
tuwima 583
dobo 583
iuzhno 583
bua 583
basile 583
lade st 583
ep17 583
rosali 583
baz 583
landsberger st 583
gasthuis 583
gerber st 583
calders 583
sidewalk 583
13b 583
tickets 583
jyvaskylan t 583
orzechowa 583
kardynala stefana wyszynskigo 583
perugia 583
venti 583
stredni 583
kremser 583
lan nan gao su 583
paulou 583
shar 583
khirr 583
peyre 583
aftokinitodromos 584
kentrikis 584
elche 584
mwy 7 central peloponnese 584
palmares 584
xi pan gao su 584
zoltan 584
5 de febrero 584
myanmar 584
autokinetodromos 7 kentrikes
gitextract_d41547bl/
├── .codespellrc
├── .flake8
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── config.yml
│ │ ├── feature_request.md
│ │ ├── report-issues-with-search-results.md
│ │ └── report-problems-with-the-software.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── actions/
│ │ ├── build-nominatim/
│ │ │ └── action.yml
│ │ ├── setup-postgresql/
│ │ │ └── action.yml
│ │ └── setup-postgresql-windows/
│ │ └── action.yml
│ └── workflows/
│ └── ci-tests.yml
├── .gitignore
├── .gitmodules
├── .mypy.ini
├── AUTHORS
├── CONTRIBUTING.md
├── COPYING
├── ChangeLog
├── LICENSES/
│ ├── Apache-2.0.txt
│ └── GPL-2.0-only.txt
├── Makefile
├── README.md
├── SECURITY.md
├── VAGRANT.md
├── Vagrantfile
├── data/
│ └── words.sql
├── docs/
│ ├── admin/
│ │ ├── Advanced-Installations.md
│ │ ├── Deployment-Python.md
│ │ ├── Faq.md
│ │ ├── Import.md
│ │ ├── Installation.md
│ │ ├── Maintenance.md
│ │ ├── Migration.md
│ │ ├── Setup-Nominatim-UI.md
│ │ └── Update.md
│ ├── api/
│ │ ├── Details.md
│ │ ├── Faq.md
│ │ ├── Lookup.md
│ │ ├── Output.md
│ │ ├── Overview.md
│ │ ├── Reverse.md
│ │ ├── Search.md
│ │ └── Status.md
│ ├── customize/
│ │ ├── Country-Settings.md
│ │ ├── Import-Styles.md
│ │ ├── Importance.md
│ │ ├── Overview.md
│ │ ├── Postcodes.md
│ │ ├── Ranking.md
│ │ ├── Result-Formatting.md
│ │ ├── SQLite.md
│ │ ├── Settings.md
│ │ ├── Special-Phrases.md
│ │ ├── Tiger.md
│ │ └── Tokenizers.md
│ ├── develop/
│ │ ├── Database-Layout.md
│ │ ├── Development-Environment.md
│ │ ├── ICU-Tokenizer-Modules.md
│ │ ├── Indexing.md
│ │ ├── Testing.md
│ │ ├── Tokenizers.md
│ │ ├── address-tables.plantuml
│ │ ├── data-sources.md
│ │ ├── osm2pgsql-tables.plantuml
│ │ ├── overview.md
│ │ ├── parenting-flow.plantuml
│ │ └── search-tables.plantuml
│ ├── extra.css
│ ├── index.md
│ ├── library/
│ │ ├── Configuration.md
│ │ ├── Getting-Started.md
│ │ ├── Input-Parameter-Types.md
│ │ ├── Low-Level-DB-Access.md
│ │ ├── NominatimAPI.md
│ │ └── Result-Handling.md
│ ├── mk_install_instructions.py
│ └── styles.css
├── lib-lua/
│ ├── flex-base.lua
│ ├── import-address.lua
│ ├── import-admin.lua
│ ├── import-extratags.lua
│ ├── import-full.lua
│ ├── import-street.lua
│ ├── taginfo.lua
│ └── themes/
│ └── nominatim/
│ ├── init.lua
│ ├── presets.lua
│ └── topics/
│ ├── address.lua
│ ├── admin.lua
│ ├── full.lua
│ └── street.lua
├── lib-sql/
│ ├── functions/
│ │ ├── associated_street_triggers.sql
│ │ ├── importance.sql
│ │ ├── interpolation.sql
│ │ ├── partition-functions.sql
│ │ ├── place_triggers.sql
│ │ ├── placex_triggers.sql
│ │ ├── postcode_triggers.sql
│ │ ├── ranking.sql
│ │ ├── updates.sql
│ │ └── utils.sql
│ ├── functions.sql
│ ├── grants.sql
│ ├── indices.sql
│ ├── partition-tables.src.sql
│ ├── postcode_tables.sql
│ ├── table-triggers.sql
│ ├── tables/
│ │ ├── addressline.sql
│ │ ├── entrance.sql
│ │ ├── import_reports.sql
│ │ ├── importance_tables.sql
│ │ ├── interpolation.sql
│ │ ├── location_area.sql
│ │ ├── nominatim_properties.sql
│ │ ├── placex.sql
│ │ ├── postcodes.sql
│ │ ├── search_name.sql
│ │ ├── status.sql
│ │ └── tiger.sql
│ ├── tables.sql
│ ├── tiger_import_finish.sql
│ ├── tiger_import_start.sql
│ └── tokenizer/
│ └── icu_tokenizer.sql
├── man/
│ ├── create-manpage.py
│ └── nominatim.1
├── mkdocs.yml
├── munin/
│ ├── nominatim_importlag
│ ├── nominatim_query_speed
│ └── nominatim_requests
├── nominatim-cli.py
├── packaging/
│ ├── nominatim-api/
│ │ ├── COPYING
│ │ ├── README.md
│ │ ├── extra_src/
│ │ │ └── paths.py
│ │ └── pyproject.toml
│ └── nominatim-db/
│ ├── COPYING
│ ├── README.md
│ ├── extra_src/
│ │ └── nominatim_db/
│ │ └── paths.py
│ ├── pyproject.toml
│ └── scripts/
│ └── nominatim
├── settings/
│ ├── address-levels.json
│ ├── country-names/
│ │ ├── ad.yaml
│ │ ├── ae.yaml
│ │ ├── af.yaml
│ │ ├── ag.yaml
│ │ ├── ai.yaml
│ │ ├── al.yaml
│ │ ├── am.yaml
│ │ ├── ao.yaml
│ │ ├── ar.yaml
│ │ ├── at.yaml
│ │ ├── au.yaml
│ │ ├── az.yaml
│ │ ├── ba.yaml
│ │ ├── bb.yaml
│ │ ├── bd.yaml
│ │ ├── be.yaml
│ │ ├── bf.yaml
│ │ ├── bg.yaml
│ │ ├── bh.yaml
│ │ ├── bi.yaml
│ │ ├── bj.yaml
│ │ ├── bm.yaml
│ │ ├── bn.yaml
│ │ ├── bo.yaml
│ │ ├── br.yaml
│ │ ├── bs.yaml
│ │ ├── bt.yaml
│ │ ├── bw.yaml
│ │ ├── by.yaml
│ │ ├── bz.yaml
│ │ ├── ca.yaml
│ │ ├── cd.yaml
│ │ ├── cf.yaml
│ │ ├── cg.yaml
│ │ ├── ch.yaml
│ │ ├── ci.yaml
│ │ ├── ck.yaml
│ │ ├── cl.yaml
│ │ ├── cm.yaml
│ │ ├── cn.yaml
│ │ ├── co.yaml
│ │ ├── cr.yaml
│ │ ├── cu.yaml
│ │ ├── cv.yaml
│ │ ├── cy.yaml
│ │ ├── cz.yaml
│ │ ├── de.yaml
│ │ ├── dj.yaml
│ │ ├── dk.yaml
│ │ ├── dm.yaml
│ │ ├── do.yaml
│ │ ├── dz.yaml
│ │ ├── ec.yaml
│ │ ├── ee.yaml
│ │ ├── eg.yaml
│ │ ├── eh.yaml
│ │ ├── er.yaml
│ │ ├── es.yaml
│ │ ├── et.yaml
│ │ ├── fi.yaml
│ │ ├── fj.yaml
│ │ ├── fk.yaml
│ │ ├── fm.yaml
│ │ ├── fo.yaml
│ │ ├── fr.yaml
│ │ ├── ga.yaml
│ │ ├── gb.yaml
│ │ ├── gd.yaml
│ │ ├── ge.yaml
│ │ ├── gg.yaml
│ │ ├── gh.yaml
│ │ ├── gi.yaml
│ │ ├── gl.yaml
│ │ ├── gm.yaml
│ │ ├── gn.yaml
│ │ ├── gq.yaml
│ │ ├── gr.yaml
│ │ ├── gs.yaml
│ │ ├── gt.yaml
│ │ ├── gw.yaml
│ │ ├── gy.yaml
│ │ ├── hn.yaml
│ │ ├── hr.yaml
│ │ ├── ht.yaml
│ │ ├── hu.yaml
│ │ ├── id.yaml
│ │ ├── ie.yaml
│ │ ├── il.yaml
│ │ ├── im.yaml
│ │ ├── in.yaml
│ │ ├── io.yaml
│ │ ├── iq.yaml
│ │ ├── ir.yaml
│ │ ├── is.yaml
│ │ ├── it.yaml
│ │ ├── je.yaml
│ │ ├── jm.yaml
│ │ ├── jo.yaml
│ │ ├── jp.yaml
│ │ ├── ke.yaml
│ │ ├── kg.yaml
│ │ ├── kh.yaml
│ │ ├── ki.yaml
│ │ ├── km.yaml
│ │ ├── kn.yaml
│ │ ├── kp.yaml
│ │ ├── kr.yaml
│ │ ├── kw.yaml
│ │ ├── ky.yaml
│ │ ├── kz.yaml
│ │ ├── la.yaml
│ │ ├── lb.yaml
│ │ ├── lc.yaml
│ │ ├── li.yaml
│ │ ├── lk.yaml
│ │ ├── lr.yaml
│ │ ├── ls.yaml
│ │ ├── lt.yaml
│ │ ├── lu.yaml
│ │ ├── lv.yaml
│ │ ├── ly.yaml
│ │ ├── ma.yaml
│ │ ├── mc.yaml
│ │ ├── md.yaml
│ │ ├── me.yaml
│ │ ├── mg.yaml
│ │ ├── mh.yaml
│ │ ├── mk.yaml
│ │ ├── ml.yaml
│ │ ├── mm.yaml
│ │ ├── mn.yaml
│ │ ├── mr.yaml
│ │ ├── ms.yaml
│ │ ├── mt.yaml
│ │ ├── mu.yaml
│ │ ├── mv.yaml
│ │ ├── mw.yaml
│ │ ├── mx.yaml
│ │ ├── my.yaml
│ │ ├── mz.yaml
│ │ ├── na.yaml
│ │ ├── ne.yaml
│ │ ├── ng.yaml
│ │ ├── ni.yaml
│ │ ├── nl.yaml
│ │ ├── no.yaml
│ │ ├── np.yaml
│ │ ├── nr.yaml
│ │ ├── nu.yaml
│ │ ├── nz.yaml
│ │ ├── om.yaml
│ │ ├── pa.yaml
│ │ ├── pe.yaml
│ │ ├── pg.yaml
│ │ ├── ph.yaml
│ │ ├── pk.yaml
│ │ ├── pl.yaml
│ │ ├── pn.yaml
│ │ ├── ps.yaml
│ │ ├── pt.yaml
│ │ ├── pw.yaml
│ │ ├── py.yaml
│ │ ├── qa.yaml
│ │ ├── ro.yaml
│ │ ├── rs.yaml
│ │ ├── ru.yaml
│ │ ├── rw.yaml
│ │ ├── sa.yaml
│ │ ├── sb.yaml
│ │ ├── sc.yaml
│ │ ├── sd.yaml
│ │ ├── se.yaml
│ │ ├── sg.yaml
│ │ ├── sh.yaml
│ │ ├── si.yaml
│ │ ├── sk.yaml
│ │ ├── sl.yaml
│ │ ├── sm.yaml
│ │ ├── sn.yaml
│ │ ├── so.yaml
│ │ ├── sr.yaml
│ │ ├── ss.yaml
│ │ ├── st.yaml
│ │ ├── sv.yaml
│ │ ├── sy.yaml
│ │ ├── sz.yaml
│ │ ├── tc.yaml
│ │ ├── td.yaml
│ │ ├── tg.yaml
│ │ ├── th.yaml
│ │ ├── tj.yaml
│ │ ├── tk.yaml
│ │ ├── tl.yaml
│ │ ├── tm.yaml
│ │ ├── tn.yaml
│ │ ├── to.yaml
│ │ ├── tr.yaml
│ │ ├── tt.yaml
│ │ ├── tv.yaml
│ │ ├── tw.yaml
│ │ ├── tz.yaml
│ │ ├── ua.yaml
│ │ ├── ug.yaml
│ │ ├── us.yaml
│ │ ├── uy.yaml
│ │ ├── uz.yaml
│ │ ├── va.yaml
│ │ ├── vc.yaml
│ │ ├── ve.yaml
│ │ ├── vg.yaml
│ │ ├── vn.yaml
│ │ ├── vu.yaml
│ │ ├── ws.yaml
│ │ ├── xk.yaml
│ │ ├── ye.yaml
│ │ ├── za.yaml
│ │ ├── zm.yaml
│ │ └── zw.yaml
│ ├── country_settings.yaml
│ ├── env.defaults
│ ├── icu-rules/
│ │ ├── extended-unicode-to-asccii.yaml
│ │ ├── unicode-digits-to-decimal.yaml
│ │ ├── variants-bg.yaml
│ │ ├── variants-ca.yaml
│ │ ├── variants-cs.yaml
│ │ ├── variants-da.yaml
│ │ ├── variants-de.yaml
│ │ ├── variants-el.yaml
│ │ ├── variants-en.yaml
│ │ ├── variants-es.yaml
│ │ ├── variants-et.yaml
│ │ ├── variants-eu.yaml
│ │ ├── variants-fi.yaml
│ │ ├── variants-fr.yaml
│ │ ├── variants-gl.yaml
│ │ ├── variants-hu.yaml
│ │ ├── variants-it.yaml
│ │ ├── variants-mg.yaml
│ │ ├── variants-ms.yaml
│ │ ├── variants-nl.yaml
│ │ ├── variants-no.yaml
│ │ ├── variants-pl.yaml
│ │ ├── variants-pt.yaml
│ │ ├── variants-ro.yaml
│ │ ├── variants-ru.yaml
│ │ ├── variants-sk.yaml
│ │ ├── variants-sl.yaml
│ │ ├── variants-sv.yaml
│ │ ├── variants-tr.yaml
│ │ ├── variants-uk.yaml
│ │ └── variants-vi.yaml
│ ├── icu_tokenizer.yaml
│ └── phrase-settings.json
├── src/
│ ├── nominatim_api/
│ │ ├── __init__.py
│ │ ├── config.py
│ │ ├── connection.py
│ │ ├── core.py
│ │ ├── errors.py
│ │ ├── localization.py
│ │ ├── logging.py
│ │ ├── lookup.py
│ │ ├── py.typed
│ │ ├── query_preprocessing/
│ │ │ ├── __init__.py
│ │ │ ├── base.py
│ │ │ ├── config.py
│ │ │ ├── normalize.py
│ │ │ ├── regex_replace.py
│ │ │ └── split_japanese_phrases.py
│ │ ├── result_formatting.py
│ │ ├── results.py
│ │ ├── reverse.py
│ │ ├── search/
│ │ │ ├── __init__.py
│ │ │ ├── db_search_builder.py
│ │ │ ├── db_search_fields.py
│ │ │ ├── db_search_lookups.py
│ │ │ ├── db_searches/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── address_search.py
│ │ │ │ ├── base.py
│ │ │ │ ├── country_search.py
│ │ │ │ ├── near_search.py
│ │ │ │ ├── place_search.py
│ │ │ │ ├── poi_search.py
│ │ │ │ └── postcode_search.py
│ │ │ ├── geocoder.py
│ │ │ ├── icu_tokenizer.py
│ │ │ ├── postcode_parser.py
│ │ │ ├── query.py
│ │ │ ├── query_analyzer_factory.py
│ │ │ └── token_assignment.py
│ │ ├── server/
│ │ │ ├── __init__.py
│ │ │ ├── asgi_adaptor.py
│ │ │ ├── content_types.py
│ │ │ ├── falcon/
│ │ │ │ ├── __init__.py
│ │ │ │ └── server.py
│ │ │ └── starlette/
│ │ │ ├── __init__.py
│ │ │ └── server.py
│ │ ├── sql/
│ │ │ ├── __init__.py
│ │ │ ├── async_core_library.py
│ │ │ ├── sqlalchemy_functions.py
│ │ │ ├── sqlalchemy_schema.py
│ │ │ ├── sqlalchemy_types/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── geometry.py
│ │ │ │ ├── int_array.py
│ │ │ │ ├── json.py
│ │ │ │ └── key_value.py
│ │ │ └── sqlite_functions.py
│ │ ├── status.py
│ │ ├── timeout.py
│ │ ├── types.py
│ │ ├── typing.py
│ │ ├── utils/
│ │ │ ├── __init__.py
│ │ │ └── json_writer.py
│ │ ├── v1/
│ │ │ ├── __init__.py
│ │ │ ├── classtypes.py
│ │ │ ├── format.py
│ │ │ ├── format_json.py
│ │ │ ├── format_xml.py
│ │ │ ├── helpers.py
│ │ │ └── server_glue.py
│ │ └── version.py
│ └── nominatim_db/
│ ├── __init__.py
│ ├── cli.py
│ ├── clicmd/
│ │ ├── __init__.py
│ │ ├── add_data.py
│ │ ├── admin.py
│ │ ├── api.py
│ │ ├── args.py
│ │ ├── convert.py
│ │ ├── export.py
│ │ ├── freeze.py
│ │ ├── index.py
│ │ ├── refresh.py
│ │ ├── replication.py
│ │ ├── setup.py
│ │ └── special_phrases.py
│ ├── config.py
│ ├── data/
│ │ ├── __init__.py
│ │ ├── country_info.py
│ │ ├── place_info.py
│ │ ├── place_name.py
│ │ └── postcode_format.py
│ ├── db/
│ │ ├── __init__.py
│ │ ├── connection.py
│ │ ├── properties.py
│ │ ├── query_pool.py
│ │ ├── sql_preprocessor.py
│ │ ├── status.py
│ │ └── utils.py
│ ├── errors.py
│ ├── indexer/
│ │ ├── __init__.py
│ │ ├── indexer.py
│ │ ├── progress.py
│ │ └── runners.py
│ ├── paths.py
│ ├── tokenizer/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── factory.py
│ │ ├── icu_rule_loader.py
│ │ ├── icu_token_analysis.py
│ │ ├── icu_tokenizer.py
│ │ ├── place_sanitizer.py
│ │ ├── sanitizers/
│ │ │ ├── __init__.py
│ │ │ ├── base.py
│ │ │ ├── clean_housenumbers.py
│ │ │ ├── clean_postcodes.py
│ │ │ ├── clean_tiger_tags.py
│ │ │ ├── config.py
│ │ │ ├── delete_tags.py
│ │ │ ├── split_name_list.py
│ │ │ ├── strip_brace_terms.py
│ │ │ ├── tag_analyzer_by_language.py
│ │ │ └── tag_japanese.py
│ │ └── token_analysis/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── config_variants.py
│ │ ├── generic.py
│ │ ├── generic_mutation.py
│ │ ├── housenumbers.py
│ │ ├── postcodes.py
│ │ └── simple_trie.py
│ ├── tools/
│ │ ├── __init__.py
│ │ ├── add_osm_data.py
│ │ ├── admin.py
│ │ ├── check_database.py
│ │ ├── collect_os_info.py
│ │ ├── convert_sqlite.py
│ │ ├── database_import.py
│ │ ├── exec_utils.py
│ │ ├── freeze.py
│ │ ├── migration.py
│ │ ├── postcodes.py
│ │ ├── refresh.py
│ │ ├── replication.py
│ │ ├── special_phrases/
│ │ │ ├── __init__.py
│ │ │ ├── importer_statistics.py
│ │ │ ├── sp_csv_loader.py
│ │ │ ├── sp_importer.py
│ │ │ ├── sp_wiki_loader.py
│ │ │ └── special_phrase.py
│ │ └── tiger_data.py
│ ├── typing.py
│ ├── utils/
│ │ ├── __init__.py
│ │ ├── centroid.py
│ │ └── url_utils.py
│ └── version.py
├── test/
│ ├── bdd/
│ │ ├── conftest.py
│ │ ├── features/
│ │ │ ├── api/
│ │ │ │ ├── details/
│ │ │ │ │ ├── language.feature
│ │ │ │ │ ├── params.feature
│ │ │ │ │ └── simple.feature
│ │ │ │ ├── lookup/
│ │ │ │ │ └── simple.feature
│ │ │ │ ├── reverse/
│ │ │ │ │ ├── geometry.feature
│ │ │ │ │ ├── language.feature
│ │ │ │ │ ├── layers.feature
│ │ │ │ │ ├── queries.feature
│ │ │ │ │ ├── v1_geocodejson.feature
│ │ │ │ │ ├── v1_geojson.feature
│ │ │ │ │ ├── v1_json.feature
│ │ │ │ │ ├── v1_params.feature
│ │ │ │ │ └── v1_xml.feature
│ │ │ │ ├── search/
│ │ │ │ │ ├── language.feature
│ │ │ │ │ ├── params.feature
│ │ │ │ │ ├── postcode.feature
│ │ │ │ │ ├── queries.feature
│ │ │ │ │ ├── simple.feature
│ │ │ │ │ ├── structured.feature
│ │ │ │ │ └── v1_geocodejson.feature
│ │ │ │ └── status/
│ │ │ │ ├── failures.feature
│ │ │ │ └── simple.feature
│ │ │ ├── db/
│ │ │ │ ├── import/
│ │ │ │ │ ├── addressing.feature
│ │ │ │ │ ├── country.feature
│ │ │ │ │ ├── entrances.feature
│ │ │ │ │ ├── interpolation.feature
│ │ │ │ │ ├── linking.feature
│ │ │ │ │ ├── naming.feature
│ │ │ │ │ ├── parenting.feature
│ │ │ │ │ ├── placex.feature
│ │ │ │ │ ├── postcodes.feature
│ │ │ │ │ ├── rank_computation.feature
│ │ │ │ │ └── search_name.feature
│ │ │ │ ├── query/
│ │ │ │ │ ├── housenumbers.feature
│ │ │ │ │ ├── interpolation.feature
│ │ │ │ │ ├── japanese.feature
│ │ │ │ │ ├── linking.feature
│ │ │ │ │ ├── normalization.feature
│ │ │ │ │ ├── postcodes.feature
│ │ │ │ │ ├── reverse.feature
│ │ │ │ │ └── search_simple.feature
│ │ │ │ └── update/
│ │ │ │ ├── addressing.feature
│ │ │ │ ├── country.feature
│ │ │ │ ├── entrances.feature
│ │ │ │ ├── interpolation.feature
│ │ │ │ ├── linked_places.feature
│ │ │ │ ├── parenting.feature
│ │ │ │ ├── postcode.feature
│ │ │ │ └── simple.feature
│ │ │ └── osm2pgsql/
│ │ │ ├── import/
│ │ │ │ ├── broken.feature
│ │ │ │ ├── custom_style.feature
│ │ │ │ ├── entrances.feature
│ │ │ │ ├── interpolation.feature
│ │ │ │ ├── relation.feature
│ │ │ │ ├── simple.feature
│ │ │ │ └── tags.feature
│ │ │ └── update/
│ │ │ ├── entrances.feature
│ │ │ ├── interpolations.feature
│ │ │ ├── postcodes.feature
│ │ │ ├── relation.feature
│ │ │ ├── simple.feature
│ │ │ └── tags.feature
│ │ ├── test_api.py
│ │ ├── test_db.py
│ │ ├── test_osm2pgsql.py
│ │ └── utils/
│ │ ├── __init__.py
│ │ ├── api_result.py
│ │ ├── api_runner.py
│ │ ├── checks.py
│ │ ├── db.py
│ │ ├── geometry_alias.py
│ │ ├── grid.py
│ │ └── place_inserter.py
│ ├── python/
│ │ ├── api/
│ │ │ ├── conftest.py
│ │ │ ├── fake_adaptor.py
│ │ │ ├── query_processing/
│ │ │ │ ├── test_normalize.py
│ │ │ │ ├── test_regex_replace.py
│ │ │ │ └── test_split_japanese_phrases.py
│ │ │ ├── search/
│ │ │ │ ├── test_api_search_query.py
│ │ │ │ ├── test_db_search_builder.py
│ │ │ │ ├── test_icu_query_analyzer.py
│ │ │ │ ├── test_postcode_parser.py
│ │ │ │ ├── test_query.py
│ │ │ │ ├── test_query_analyzer_factory.py
│ │ │ │ ├── test_search_address.py
│ │ │ │ ├── test_search_country.py
│ │ │ │ ├── test_search_near.py
│ │ │ │ ├── test_search_places.py
│ │ │ │ ├── test_search_poi.py
│ │ │ │ ├── test_search_postcode.py
│ │ │ │ └── test_token_assignment.py
│ │ │ ├── test_api_connection.py
│ │ │ ├── test_api_deletable_v1.py
│ │ │ ├── test_api_details.py
│ │ │ ├── test_api_lookup.py
│ │ │ ├── test_api_polygons_v1.py
│ │ │ ├── test_api_reverse.py
│ │ │ ├── test_api_search.py
│ │ │ ├── test_api_status.py
│ │ │ ├── test_api_types.py
│ │ │ ├── test_export.py
│ │ │ ├── test_helpers_v1.py
│ │ │ ├── test_localization.py
│ │ │ ├── test_result_formatting_v1.py
│ │ │ ├── test_result_formatting_v1_reverse.py
│ │ │ ├── test_results.py
│ │ │ ├── test_server_glue_v1.py
│ │ │ ├── test_timeout.py
│ │ │ └── test_warm.py
│ │ ├── cli/
│ │ │ ├── conftest.py
│ │ │ ├── test_cli.py
│ │ │ ├── test_cmd_admin.py
│ │ │ ├── test_cmd_api.py
│ │ │ ├── test_cmd_import.py
│ │ │ ├── test_cmd_index.py
│ │ │ ├── test_cmd_refresh.py
│ │ │ └── test_cmd_replication.py
│ │ ├── config/
│ │ │ ├── test_config.py
│ │ │ └── test_config_load_module.py
│ │ ├── conftest.py
│ │ ├── cursor.py
│ │ ├── data/
│ │ │ └── test_country_info.py
│ │ ├── db/
│ │ │ ├── test_connection.py
│ │ │ ├── test_properties.py
│ │ │ ├── test_sql_preprocessor.py
│ │ │ ├── test_status.py
│ │ │ └── test_utils.py
│ │ ├── dummy_tokenizer.py
│ │ ├── indexer/
│ │ │ └── test_indexing.py
│ │ ├── mock_icu_word_table.py
│ │ ├── pytest.ini
│ │ ├── tokenizer/
│ │ │ ├── sanitizers/
│ │ │ │ ├── test_clean_housenumbers.py
│ │ │ │ ├── test_clean_postcodes.py
│ │ │ │ ├── test_clean_tiger_tags.py
│ │ │ │ ├── test_delete_tags.py
│ │ │ │ ├── test_sanitizer_config.py
│ │ │ │ ├── test_split_name_list.py
│ │ │ │ ├── test_strip_brace_terms.py
│ │ │ │ ├── test_tag_analyzer_by_language.py
│ │ │ │ └── test_tag_japanese.py
│ │ │ ├── test_factory.py
│ │ │ ├── test_icu.py
│ │ │ ├── test_icu_rule_loader.py
│ │ │ ├── test_place_sanitizer.py
│ │ │ └── token_analysis/
│ │ │ ├── test_analysis_postcodes.py
│ │ │ ├── test_generic.py
│ │ │ ├── test_generic_mutation.py
│ │ │ └── test_simple_trie.py
│ │ ├── tools/
│ │ │ ├── conftest.py
│ │ │ ├── test_add_osm_data.py
│ │ │ ├── test_admin.py
│ │ │ ├── test_check_database.py
│ │ │ ├── test_database_import.py
│ │ │ ├── test_exec_utils.py
│ │ │ ├── test_freeze.py
│ │ │ ├── test_import_special_phrases.py
│ │ │ ├── test_migration.py
│ │ │ ├── test_postcodes.py
│ │ │ ├── test_refresh.py
│ │ │ ├── test_refresh_address_levels.py
│ │ │ ├── test_refresh_create_functions.py
│ │ │ ├── test_refresh_wiki_data.py
│ │ │ ├── test_replication.py
│ │ │ ├── test_sp_csv_loader.py
│ │ │ ├── test_sp_importer.py
│ │ │ ├── test_sp_wiki_loader.py
│ │ │ └── test_tiger_data.py
│ │ └── utils/
│ │ ├── test_centroid.py
│ │ └── test_json_writer.py
│ ├── testdata/
│ │ ├── sp_csv_test.csv
│ │ └── special_phrases_test_content.txt
│ └── testdb/
│ ├── additional_api_test.data.osm
│ ├── apidb-test-data.pbf
│ ├── full_en_phrases_test.csv
│ └── tiger/
│ └── 01001.csv
├── utils/
│ ├── import_multiple_regions.sh
│ └── update_database.sh
└── vagrant/
├── Install-on-Ubuntu-22.sh
└── Install-on-Ubuntu-24.sh
Showing preview only (270K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2762 symbols across 255 files)
FILE: data/words.sql
type word_frequencies (line 23) | CREATE TABLE word_frequencies (
FILE: lib-sql/functions/importance.sql
function get_wikipedia_match (line 25) | CREATE OR REPLACE FUNCTION get_wikipedia_match(extratags HSTORE, country...
FILE: lib-sql/functions/interpolation.sql
function place_interpolation_insert (line 10) | CREATE OR REPLACE FUNCTION place_interpolation_insert()
function get_interpolation_address (line 99) | CREATE OR REPLACE FUNCTION get_interpolation_address(in_address HSTORE, ...
function osmline_insert (line 167) | CREATE OR REPLACE FUNCTION osmline_insert()
FILE: lib-sql/functions/partition-functions.sql
function getNearFeatures (line 20) | CREATE OR REPLACE function getNearFeatures(in_partition INTEGER, feature...
function deleteLocationArea (line 93) | create or replace function deleteLocationArea(in_partition INTEGER, in_p...
function insertLocationAreaLarge (line 116) | create or replace function insertLocationAreaLarge(
function getNearestNamedRoadPlaceId (line 150) | CREATE OR REPLACE FUNCTION getNearestNamedRoadPlaceId(in_partition INTEGER,
function getNearestNamedPlacePlaceId (line 179) | CREATE OR REPLACE FUNCTION getNearestNamedPlacePlaceId(in_partition INTE...
function insertSearchName (line 209) | create or replace function insertSearchName(
function insertLocationRoad (line 248) | create or replace function insertLocationRoad(
function deleteRoad (line 267) | create or replace function deleteRoad(in_partition INTEGER, in_place_id ...
FILE: lib-sql/functions/placex_triggers.sql
function placex_indexing_prepare (line 25) | CREATE OR REPLACE FUNCTION placex_indexing_prepare(p placex)
function find_parent_for_poi (line 191) | CREATE OR REPLACE FUNCTION find_parent_for_poi(poi_osm_type CHAR(1),
FILE: lib-sql/functions/postcode_triggers.sql
function postcodes_update (line 16) | CREATE OR REPLACE FUNCTION postcodes_update()
function postcodes_insert (line 62) | CREATE OR REPLACE FUNCTION postcodes_insert()
FILE: lib-sql/functions/ranking.sql
function is_rankable_place (line 12) | CREATE OR REPLACE FUNCTION is_rankable_place(osm_type TEXT, class TEXT,
function reverse_place_diameter (line 39) | CREATE OR REPLACE FUNCTION reverse_place_diameter(rank_search SMALLINT)
function update_place_diameter (line 64) | CREATE OR REPLACE FUNCTION update_place_diameter(rank_search SMALLINT)
function geometry_to_rank (line 98) | CREATE OR REPLACE FUNCTION geometry_to_rank(search_rank SMALLINT, geomet...
function weigh_search (line 256) | CREATE OR REPLACE FUNCTION weigh_search(search_vector INT[],
FILE: lib-sql/functions/updates.sql
function update_invalidate_for_new_place (line 11) | CREATE OR REPLACE FUNCTION update_invalidate_for_new_place(address_rank ...
FILE: lib-sql/functions/utils.sql
function get_center_point (line 10) | CREATE OR REPLACE FUNCTION get_center_point(place GEOMETRY)
function geometry_sector (line 30) | CREATE OR REPLACE FUNCTION geometry_sector(partition INTEGER, place GEOM...
function array_merge (line 41) | CREATE OR REPLACE FUNCTION array_merge(a INTEGER[], b INTEGER[])
function get_rel_node_members (line 73) | CREATE OR REPLACE FUNCTION get_rel_node_members(members TEXT[],
function get_rel_node_members (line 94) | CREATE OR REPLACE FUNCTION get_rel_node_members(members JSONB, memberLab...
function add_default_place_name (line 121) | CREATE OR REPLACE FUNCTION add_default_place_name(country_code VARCHAR(2),
function get_country_code (line 186) | CREATE OR REPLACE FUNCTION get_country_code(place geometry)
function get_country_language_code (line 247) | CREATE OR REPLACE FUNCTION get_country_language_code(search_country_code...
function get_partition (line 265) | CREATE OR REPLACE FUNCTION get_partition(in_country_code VARCHAR(10))
function find_parent_for_address (line 289) | CREATE OR REPLACE FUNCTION find_parent_for_address(token_info JSONB,
function place_node_fuzzy_area (line 338) | CREATE OR REPLACE FUNCTION place_node_fuzzy_area(geom GEOMETRY, rank_sea...
function add_location (line 360) | CREATE OR REPLACE FUNCTION add_location(place_id BIGINT, country_code va...
function quad_split_geometry (line 394) | CREATE OR REPLACE FUNCTION quad_split_geometry(geometry GEOMETRY, maxare...
function place_force_delete (line 518) | CREATE OR REPLACE FUNCTION place_force_delete(placeid BIGINT)
function place_force_update (line 541) | CREATE OR REPLACE FUNCTION place_force_update(placeid BIGINT)
function flush_deleted_places (line 589) | CREATE OR REPLACE FUNCTION flush_deleted_places()
function place_update_entrances (line 647) | CREATE OR REPLACE FUNCTION place_update_entrances(placeid BIGINT, osmid ...
FILE: lib-sql/indices.sql
type idx_place_addressline_address_place_id (line 11) | CREATE INDEX IF NOT EXISTS idx_place_addressline_address_place_id
type place_interpolation_to_be_deleted (line 77) | CREATE TABLE IF NOT EXISTS place_interpolation_to_be_deleted (
FILE: lib-sql/partition-tables.src.sql
type search_name_blank (line 9) | CREATE TABLE search_name_blank (
type location_area_large_ (line 17) | CREATE TABLE location_area_large_{{ partition }} () INHERITS (location_a...
FILE: lib-sql/tables/addressline.sql
type place_addressline (line 10) | CREATE TABLE place_addressline (
FILE: lib-sql/tables/entrance.sql
type placex_entrance (line 11) | CREATE TABLE placex_entrance (
FILE: lib-sql/tables/import_reports.sql
type import_polygon_error (line 9) | CREATE TABLE import_polygon_error (
type idx_import_polygon_error_osmid (line 22) | CREATE INDEX idx_import_polygon_error_osmid ON import_polygon_error
type import_polygon_delete (line 27) | CREATE TABLE import_polygon_delete (
type idx_import_polygon_delete_osmid (line 34) | CREATE INDEX idx_import_polygon_delete_osmid ON import_polygon_delete
FILE: lib-sql/tables/importance_tables.sql
type wikimedia_importance (line 10) | CREATE TABLE wikimedia_importance (
FILE: lib-sql/tables/interpolation.sql
type location_property_osmline (line 9) | CREATE TABLE location_property_osmline (
FILE: lib-sql/tables/location_area.sql
type location_area (line 9) | CREATE TABLE location_area (
type location_area_large (line 22) | CREATE TABLE location_area_large () INHERITS (location_area)
type location_area_country (line 25) | CREATE TABLE location_area_country (
FILE: lib-sql/tables/nominatim_properties.sql
type nominatim_properties (line 9) | CREATE TABLE nominatim_properties (
FILE: lib-sql/tables/placex.sql
type placex (line 11) | CREATE TABLE placex (
type idx_place_id (line 31) | CREATE UNIQUE INDEX idx_place_id ON placex USING BTREE (place_id) {{db.t...
type idx_placex_geometry_address_area_candidates (line 48) | CREATE INDEX idx_placex_geometry_address_area_candidates ON placex
type idx_placex_geometry_buildings (line 54) | CREATE INDEX idx_placex_geometry_buildings ON placex
FILE: lib-sql/tables/postcodes.sql
type location_postcodes (line 9) | CREATE TABLE location_postcodes (
FILE: lib-sql/tables/search_name.sql
type search_name (line 12) | CREATE TABLE search_name (
FILE: lib-sql/tables/status.sql
type import_status (line 9) | CREATE TABLE import_status (
type import_osmosis_log (line 16) | CREATE TABLE import_osmosis_log (
FILE: lib-sql/tables/tiger.sql
type location_property_tiger (line 9) | CREATE TABLE location_property_tiger (
FILE: lib-sql/tiger_import_finish.sql
type idx_location_property_tiger_parent_place_id_imp (line 9) | CREATE INDEX IF NOT EXISTS idx_location_property_tiger_parent_place_id_imp
FILE: lib-sql/tiger_import_start.sql
type location_property_tiger_import (line 8) | CREATE TABLE location_property_tiger_import (
function getNearestNamedRoadPlaceIdSlow (line 21) | CREATE OR REPLACE FUNCTION getNearestNamedRoadPlaceIdSlow(in_centroid GE...
function getNearestParallelRoadFeatureSlow (line 46) | CREATE OR REPLACE FUNCTION getNearestParallelRoadFeatureSlow(line GEOMETRY)
function getNearestRoadPlaceIdSlow (line 85) | CREATE OR REPLACE FUNCTION getNearestRoadPlaceIdSlow(point GEOMETRY)
function tiger_line_import (line 111) | CREATE OR REPLACE FUNCTION tiger_line_import(linegeo GEOMETRY, in_startn...
FILE: lib-sql/tokenizer/icu_tokenizer.sql
function token_get_name_search_tokens (line 11) | CREATE OR REPLACE FUNCTION token_get_name_search_tokens(info JSONB)
function token_get_name_match_tokens (line 21) | CREATE OR REPLACE FUNCTION token_get_name_match_tokens(info JSONB)
function token_get_housenumber_search_tokens (line 29) | CREATE OR REPLACE FUNCTION token_get_housenumber_search_tokens(info JSONB)
function token_normalized_housenumber (line 37) | CREATE OR REPLACE FUNCTION token_normalized_housenumber(info JSONB)
function token_is_street_address (line 44) | CREATE OR REPLACE FUNCTION token_is_street_address(info JSONB)
function token_has_addr_street (line 51) | CREATE OR REPLACE FUNCTION token_has_addr_street(info JSONB)
function token_has_addr_place (line 58) | CREATE OR REPLACE FUNCTION token_has_addr_place(info JSONB)
function token_matches_street (line 65) | CREATE OR REPLACE FUNCTION token_matches_street(info JSONB, street_token...
function token_matches_place (line 72) | CREATE OR REPLACE FUNCTION token_matches_place(info JSONB, place_tokens ...
function token_addr_place_search_tokens (line 79) | CREATE OR REPLACE FUNCTION token_addr_place_search_tokens(info JSONB)
function token_get_address_keys (line 86) | CREATE OR REPLACE FUNCTION token_get_address_keys(info JSONB)
function token_get_address_search_tokens (line 93) | CREATE OR REPLACE FUNCTION token_get_address_search_tokens(info JSONB, k...
function token_matches_address (line 100) | CREATE OR REPLACE FUNCTION token_matches_address(info JSONB, key TEXT, t...
function token_get_postcode (line 107) | CREATE OR REPLACE FUNCTION token_get_postcode(info JSONB)
function token_strip_info (line 115) | CREATE OR REPLACE FUNCTION token_strip_info(info JSONB)
function getorcreate_partial_word (line 221) | CREATE OR REPLACE FUNCTION getorcreate_partial_word(partial TEXT)
function getorcreate_hnr_id (line 242) | CREATE OR REPLACE FUNCTION getorcreate_hnr_id(lookup_term TEXT)
function create_analyzed_hnr_id (line 263) | CREATE OR REPLACE FUNCTION create_analyzed_hnr_id(norm_term TEXT, lookup...
function create_postcode_word (line 285) | CREATE OR REPLACE FUNCTION create_postcode_word(postcode TEXT, lookup_te...
FILE: man/create-manpage.py
function get_parser (line 9) | def get_parser():
FILE: src/nominatim_api/connection.py
class SearchConnection (line 26) | class SearchConnection:
method __init__ (line 33) | def __init__(self, conn: AsyncConnection,
method set_query_timeout (line 44) | def set_query_timeout(self, timeout: Optional[int]) -> None:
method scalar (line 50) | async def scalar(self, sql: sa.sql.base.Executable,
method execute (line 57) | async def execute(self, sql: 'sa.Executable',
method get_property (line 65) | async def get_property(self, name: str, cached: bool = True) -> str:
method get_db_property (line 91) | async def get_db_property(self, name: str) -> Any:
method get_cached_value (line 103) | async def get_cached_value(self, group: str, name: str,
method get_class_table (line 125) | async def get_class_table(self, cls: str, typ: str) -> Optional[SaFrom...
FILE: src/nominatim_api/core.py
class NominatimAPIAsync (line 40) | class NominatimAPIAsync:
method __init__ (line 51) | def __init__(self, project_dir: Optional[Union[str, Path]] = None,
method setup_database (line 84) | async def setup_database(self) -> None:
method close (line 166) | async def close(self) -> None:
method __aenter__ (line 174) | async def __aenter__(self) -> 'NominatimAPIAsync':
method __aexit__ (line 177) | async def __aexit__(self, *_: Any) -> None:
method begin (line 181) | async def begin(self, abs_timeout: Optional[float] = None) -> AsyncIte...
method status (line 200) | async def status(self) -> StatusResult:
method details (line 213) | async def details(self, place: ntyp.PlaceRef, **params: Any) -> Option...
method lookup (line 228) | async def lookup(self, places: Sequence[ntyp.PlaceRef], **params: Any)...
method reverse (line 243) | async def reverse(self, coord: ntyp.AnyPoint, **params: Any) -> Option...
method search (line 266) | async def search(self, query: str, **params: Any) -> SearchResults:
method search_address (line 283) | async def search_address(self, amenity: Optional[str] = None,
method search_category (line 340) | async def search_category(self, categories: List[Tuple[str, str]],
class NominatimAPI (line 367) | class NominatimAPI:
method __init__ (line 375) | def __init__(self, project_dir: Optional[Union[str, Path]] = None,
method close (line 391) | def close(self) -> None:
method __enter__ (line 401) | def __enter__(self) -> 'NominatimAPI':
method __exit__ (line 404) | def __exit__(self, *_: Any) -> None:
method config (line 408) | def config(self) -> Configuration:
method status (line 414) | def status(self) -> StatusResult:
method details (line 432) | def details(self, place: ntyp.PlaceRef, **params: Any) -> Optional[Det...
method lookup (line 516) | def lookup(self, places: Sequence[ntyp.PlaceRef], **params: Any) -> Se...
method reverse (line 594) | def reverse(self, coord: ntyp.AnyPoint, **params: Any) -> Optional[Rev...
method search (line 677) | def search(self, query: str, **params: Any) -> SearchResults:
method search_address (line 778) | def search_address(self, amenity: Optional[str] = None,
method search_category (line 897) | def search_category(self, categories: List[Tuple[str, str]],
FILE: src/nominatim_api/errors.py
class UsageError (line 12) | class UsageError(Exception):
FILE: src/nominatim_api/localization.py
class Locales (line 16) | class Locales:
method __init__ (line 23) | def __init__(self, langs: Optional[List[str]] = None,
method __bool__ (line 37) | def __bool__(self) -> bool:
method _add_tags (line 40) | def _add_tags(self, *tags: str) -> None:
method _add_lang_tags (line 45) | def _add_lang_tags(self, *tags: str) -> None:
method display_name (line 51) | def display_name(self, names: Optional[Mapping[str, str]]) -> str:
method from_accept_languages (line 70) | def from_accept_languages(langstr: str, names: str = 'name:XX,name') -...
method localize (line 100) | def localize(self, lines: AddressLines) -> None:
method localize_results (line 112) | def localize_results(self, results: List[BaseResultT]) -> None:
FILE: src/nominatim_api/logging.py
function _debug_name (line 30) | def _debug_name(res: Any) -> str:
class BaseLogger (line 37) | class BaseLogger:
method get_buffer (line 43) | def get_buffer(self) -> str:
method function (line 48) | def function(self, func: str, **kwargs: Any) -> None:
method section (line 52) | def section(self, heading: str) -> None:
method comment (line 56) | def comment(self, text: str) -> None:
method var_dump (line 60) | def var_dump(self, heading: str, var: Any) -> None:
method table_dump (line 65) | def table_dump(self, heading: str, rows: Iterator[Optional[List[Any]]]...
method result_dump (line 69) | def result_dump(self, heading: str, results: Iterator[Tuple[Any, Any]]...
method sql (line 73) | def sql(self, conn: AsyncConnection, statement: 'sa.Executable',
method format_sql (line 78) | def format_sql(self, conn: AsyncConnection, statement: 'sa.Executable',
class HTMLLogger (line 123) | class HTMLLogger(BaseLogger):
method __init__ (line 126) | def __init__(self) -> None:
method _timestamp (line 129) | def _timestamp(self) -> None:
method get_buffer (line 132) | def get_buffer(self) -> str:
method function (line 135) | def function(self, func: str, **kwargs: Any) -> None:
method section (line 142) | def section(self, heading: str) -> None:
method comment (line 146) | def comment(self, text: str) -> None:
method var_dump (line 150) | def var_dump(self, heading: str, var: Any) -> None:
method table_dump (line 157) | def table_dump(self, heading: str, rows: Iterator[Optional[List[Any]]]...
method result_dump (line 173) | def result_dump(self, heading: str, results: Iterator[Tuple[Any, Any]]...
method sql (line 206) | def sql(self, conn: AsyncConnection, statement: 'sa.Executable',
method _python_var (line 217) | def _python_var(self, var: Any) -> str:
method _write (line 224) | def _write(self, text: str) -> None:
class TextLogger (line 230) | class TextLogger(BaseLogger):
method __init__ (line 233) | def __init__(self) -> None:
method _timestamp (line 236) | def _timestamp(self) -> None:
method get_buffer (line 239) | def get_buffer(self) -> str:
method function (line 242) | def function(self, func: str, **kwargs: Any) -> None:
method section (line 248) | def section(self, heading: str) -> None:
method comment (line 252) | def comment(self, text: str) -> None:
method var_dump (line 255) | def var_dump(self, heading: str, var: Any) -> None:
method table_dump (line 261) | def table_dump(self, heading: str, rows: Iterator[Optional[List[Any]]]...
method result_dump (line 281) | def result_dump(self, heading: str, results: Iterator[Tuple[Any, Any]]...
method sql (line 295) | def sql(self, conn: AsyncConnection, statement: 'sa.Executable',
method _python_var (line 301) | def _python_var(self, var: Any) -> str:
method _write (line 304) | def _write(self, text: str) -> None:
function set_log_output (line 311) | def set_log_output(fmt: str) -> None:
function log (line 322) | def log() -> BaseLogger:
function get_and_disable (line 328) | def get_and_disable() -> str:
FILE: src/nominatim_api/lookup.py
class LookupTuple (line 36) | class LookupTuple:
class LookupCollector (line 43) | class LookupCollector:
method __init__ (line 49) | def __init__(self, places: Iterable[ntyp.PlaceRef],
method get_results (line 54) | def get_results(self) -> nres.SearchResults:
method add_rows_from_sql (line 59) | async def add_rows_from_sql(self, conn: SearchConnection, sql: SaSelect,
method enumerate_free_place_ids (line 85) | def enumerate_free_place_ids(self) -> Iterable[Tuple[int, ntyp.PlaceID]]:
method enumerate_free_osm_ids (line 89) | def enumerate_free_osm_ids(self) -> Iterable[Tuple[int, ntyp.OsmID]]:
class DetailedCollector (line 94) | class DetailedCollector:
method __init__ (line 100) | def __init__(self, place: ntyp.PlaceRef, with_geometry: bool) -> None:
method add_rows_from_sql (line 105) | async def add_rows_from_sql(self, conn: SearchConnection, sql: SaSelect,
method enumerate_free_place_ids (line 132) | def enumerate_free_place_ids(self) -> Iterable[Tuple[int, ntyp.PlaceID]]:
method enumerate_free_osm_ids (line 137) | def enumerate_free_osm_ids(self) -> Iterable[Tuple[int, ntyp.OsmID]]:
function get_detailed_place (line 146) | async def get_detailed_place(conn: SearchConnection, place: ntyp.PlaceRef,
function get_places (line 168) | async def get_places(conn: SearchConnection, places: Iterable[ntyp.Place...
function find_in_placex (line 187) | async def find_in_placex(conn: SearchConnection, collector: Collector) -...
function find_in_osmline (line 236) | async def find_in_osmline(conn: SearchConnection, collector: Collector) ...
function find_in_postcode (line 279) | async def find_in_postcode(conn: SearchConnection, collector: Collector)...
function find_in_tiger (line 324) | async def find_in_tiger(conn: SearchConnection, collector: Collector) ->...
FILE: src/nominatim_api/query_preprocessing/base.py
class QueryHandler (line 19) | class QueryHandler(Protocol):
method create (line 22) | def create(self, config: QueryConfig) -> QueryProcessingFunc:
FILE: src/nominatim_api/query_preprocessing/config.py
class QueryConfig (line 21) | class QueryConfig(_BaseUserDict):
method set_normalizer (line 29) | def set_normalizer(self, normalizer: Any) -> 'QueryConfig':
FILE: src/nominatim_api/query_preprocessing/normalize.py
function create (line 22) | def create(config: QueryConfig) -> QueryProcessingFunc:
FILE: src/nominatim_api/query_preprocessing/regex_replace.py
class _GenericPreprocessing (line 22) | class _GenericPreprocessing:
method __init__ (line 25) | def __init__(self, config: QueryConfig) -> None:
method split_phrase (line 34) | def split_phrase(self, phrase: Phrase) -> Phrase:
method __call__ (line 41) | def __call__(self, phrases: List[Phrase]) -> List[Phrase]:
function create (line 50) | def create(config: QueryConfig) -> QueryProcessingFunc:
FILE: src/nominatim_api/query_preprocessing/split_japanese_phrases.py
class _JapanesePreprocessing (line 36) | class _JapanesePreprocessing:
method __init__ (line 38) | def __init__(self, config: QueryConfig) -> None:
method split_phrase (line 41) | def split_phrase(self, phrase: Phrase) -> Phrase:
method __call__ (line 52) | def __call__(self, phrases: List[Phrase]) -> List[Phrase]:
function create (line 58) | def create(config: QueryConfig) -> QueryProcessingFunc:
FILE: src/nominatim_api/result_formatting.py
class FormatDispatcher (line 22) | class FormatDispatcher:
method __init__ (line 27) | def __init__(self, content_types: Optional[Mapping[str, str]] = None) ...
method format_func (line 34) | def format_func(self, result_class: Type[T],
method error_format_func (line 45) | def error_format_func(self, func: ErrorFormatFunc) -> ErrorFormatFunc:
method list_formats (line 53) | def list_formats(self, result_type: Type[Any]) -> List[str]:
method supports_format (line 58) | def supports_format(self, result_type: Type[Any], fmt: str) -> bool:
method format_result (line 63) | def format_result(self, result: Any, fmt: str, options: Mapping[str, A...
method format_error (line 71) | def format_error(self, content_type: str, msg: str, status: int) -> str:
method set_content_type (line 79) | def set_content_type(self, fmt: str, content_type: str) -> None:
method get_content_type (line 86) | def get_content_type(self, fmt: str) -> str:
function load_format_dispatcher (line 95) | def load_format_dispatcher(api_name: str, project_dir: Optional[Path]) -...
FILE: src/nominatim_api/results.py
function _mingle_name_tags (line 33) | def _mingle_name_tags(names: Optional[Dict[str, str]]) -> Optional[Dict[...
class SourceTable (line 51) | class SourceTable(enum.Enum):
class AddressLine (line 82) | class AddressLine:
method display_name (line 136) | def display_name(self) -> Optional[str]:
class AddressLines (line 148) | class AddressLines(List[AddressLine]):
class WordInfo (line 153) | class WordInfo:
class BaseResult (line 173) | class BaseResult:
method lat (line 214) | def lat(self) -> float:
method lon (line 220) | def lon(self) -> float:
method display_name (line 226) | def display_name(self) -> Optional[str]:
method calculated_importance (line 254) | def calculated_importance(self) -> float:
class DetailedResult (line 266) | class DetailedResult(BaseResult):
class ReverseResult (line 274) | class ReverseResult(BaseResult):
class ReverseResults (line 281) | class ReverseResults(List[ReverseResult]):
class SearchResult (line 288) | class SearchResult(BaseResult):
method ranking (line 295) | def ranking(self) -> float:
class SearchResults (line 302) | class SearchResults(List[SearchResult]):
function _filter_geometries (line 308) | def _filter_geometries(row: SaRow) -> Dict[str, str]:
function create_from_placex_row (line 313) | def create_from_placex_row(row: SaRow, class_type: Type[BaseResultT]) ->...
function create_from_osmline_row (line 339) | def create_from_osmline_row(row: SaRow, class_type: Type[BaseResultT]) -...
function create_from_tiger_row (line 370) | def create_from_tiger_row(row: SaRow,
function create_from_postcode_row (line 403) | def create_from_postcode_row(row: SaRow, class_type: Type[BaseResultT]) ...
function create_from_country_row (line 422) | def create_from_country_row(row: SaRow, class_type: Type[BaseResultT]) -...
function add_result_details (line 436) | async def add_result_details(conn: SearchConnection, results: List[BaseR...
function _result_row_to_address_row (line 463) | def _result_row_to_address_row(row: SaRow, isaddress: Optional[bool] = N...
function _get_address_lookup_id (line 489) | def _get_address_lookup_id(result: BaseResultT) -> int:
function _finalize_entry (line 497) | async def _finalize_entry(conn: SearchConnection, result: BaseResultT) -...
function _setup_address_details (line 536) | def _setup_address_details(result: BaseResultT) -> None:
function complete_address_details (line 570) | async def complete_address_details(conn: SearchConnection, results: List...
function _placex_select_address_row (line 673) | def _placex_select_address_row(conn: SearchConnection,
function complete_linked_places (line 685) | async def complete_linked_places(conn: SearchConnection, result: BaseRes...
function complete_entrances_details (line 699) | async def complete_entrances_details(conn: SearchConnection, results: Li...
function complete_keywords (line 723) | async def complete_keywords(conn: SearchConnection, result: BaseResult) ...
function complete_parented_places (line 747) | async def complete_parented_places(conn: SearchConnection, result: BaseR...
FILE: src/nominatim_api/reverse.py
function no_index (line 30) | def no_index(expr: SaColumn) -> SaColumn:
function _select_from_placex (line 37) | def _select_from_placex(t: SaFromClause, use_wkt: bool = True) -> SaSelect:
function _interpolated_housenumber (line 61) | def _interpolated_housenumber(table: SaFromClause) -> SaLabel:
function _interpolated_position (line 68) | def _interpolated_position(table: SaFromClause) -> SaLabel:
function _locate_interpolation (line 76) | def _locate_interpolation(table: SaFromClause) -> SaLabel:
function _get_closest (line 84) | def _get_closest(*rows: Optional[SaRow]) -> Optional[SaRow]:
class ReverseGeocoder (line 88) | class ReverseGeocoder:
method __init__ (line 93) | def __init__(self, conn: SearchConnection, params: ReverseDetails,
method max_rank (line 102) | def max_rank(self) -> int:
method has_geometries (line 107) | def has_geometries(self) -> bool:
method layer_enabled (line 112) | def layer_enabled(self, *layer: DataLayer) -> bool:
method layer_disabled (line 117) | def layer_disabled(self, *layer: DataLayer) -> bool:
method has_feature_layers (line 122) | def has_feature_layers(self) -> bool:
method _add_geometry_columns (line 127) | def _add_geometry_columns(self, sql: SaLambdaSelect, col: SaColumn) ->...
method _filter_by_layer (line 144) | def _filter_by_layer(self, table: SaFromClause) -> SaColumn:
method _find_closest_street_or_pois (line 160) | async def _find_closest_street_or_pois(self, distance: float,
method _find_housenumber_for_street (line 241) | async def _find_housenumber_for_street(self, parent_place_id: int) -> ...
method _find_interpolation_for_street (line 262) | async def _find_interpolation_for_street(self, parent_place_id: Option...
method _find_tiger_number_for_street (line 292) | async def _find_tiger_number_for_street(self, parent_place_id: int) ->...
method lookup_street_poi (line 321) | async def lookup_street_poi(self) -> Tuple[Optional[SaRow], RowFunc]:
method _lookup_area_address (line 389) | async def _lookup_area_address(self) -> Optional[SaRow]:
method _lookup_area_others (line 459) | async def _lookup_area_others(self) -> Optional[SaRow]:
method lookup_area (line 489) | async def lookup_area(self) -> Optional[SaRow]:
method lookup_country_codes (line 506) | async def lookup_country_codes(self) -> List[str]:
method lookup_country (line 518) | async def lookup_country(self, ccodes: List[str]) -> Tuple[Optional[Sa...
method lookup (line 605) | async def lookup(self, coord: AnyPoint) -> Optional[nres.ReverseResult]:
FILE: src/nominatim_api/search/db_search_builder.py
function wrap_near_search (line 21) | def wrap_near_search(categories: List[Tuple[str, str]],
function build_poi_search (line 32) | def build_poi_search(category: List[Tuple[str, str]],
class SearchBuilder (line 50) | class SearchBuilder:
method __init__ (line 54) | def __init__(self, query: qmod.QueryStruct, details: SearchDetails) ->...
method configured_for_country (line 59) | def configured_for_country(self) -> bool:
method configured_for_postcode (line 67) | def configured_for_postcode(self) -> bool:
method configured_for_housenumbers (line 75) | def configured_for_housenumbers(self) -> bool:
method build (line 82) | def build(self, assignment: TokenAssignment) -> Iterator[dbs.AbstractS...
method build_poi_search (line 122) | def build_poi_search(self, sdata: dbf.SearchData) -> Iterator[dbs.Abst...
method build_special_search (line 130) | def build_special_search(self, sdata: dbf.SearchData,
method build_housenumber_search (line 153) | def build_housenumber_search(self, sdata: dbf.SearchData, hnrs: List[q...
method build_name_search (line 193) | def build_name_search(self, sdata: dbf.SearchData,
method yield_lookups (line 210) | def yield_lookups(self, name: qmod.TokenRange, address: List[qmod.Toke...
method yield_name_only_lookups (line 226) | def yield_name_only_lookups(self, partials: dbf.CountedTokenIDs, name:...
method yield_address_lookups (line 249) | def yield_address_lookups(self, name_partials: dbf.CountedTokenIDs,
method get_name_ranking (line 299) | def get_name_ranking(self, trange: qmod.TokenRange,
method get_addr_ranking (line 314) | def get_addr_ranking(self, trange: qmod.TokenRange) -> dbf.FieldRanking:
method get_search_data (line 368) | def get_search_data(self, assignment: TokenAssignment) -> Optional[dbf...
method get_country_tokens (line 410) | def get_country_tokens(self, trange: qmod.TokenRange) -> List[qmod.Tok...
method get_qualifier_tokens (line 421) | def get_qualifier_tokens(self, trange: qmod.TokenRange) -> List[qmod.T...
method get_near_items (line 432) | def get_near_items(self, assignment: TokenAssignment) -> Optional[dbf....
FILE: src/nominatim_api/search/db_search_fields.py
class CountedTokenIDs (line 21) | class CountedTokenIDs:
method __init__ (line 29) | def __init__(self, tokens: Iterator[Token], count_column: str = 'count'):
method __len__ (line 33) | def __len__(self) -> int:
method get_num_lookup_tokens (line 36) | def get_num_lookup_tokens(self, limit: int, fac: int) -> int:
method min_count (line 59) | def min_count(self) -> int:
method expected_for_all_search (line 62) | def expected_for_all_search(self, fac: int = 5) -> int:
method get_tokens (line 65) | def get_tokens(self) -> List[int]:
method get_head_tokens (line 68) | def get_head_tokens(self, num_tokens: int) -> List[int]:
method get_tail_tokens (line 71) | def get_tail_tokens(self, first: int) -> List[int]:
method split_lookup (line 74) | def split_lookup(self, split: int, column: str) -> 'List[FieldLookup]':
class WeightedStrings (line 82) | class WeightedStrings:
method __bool__ (line 88) | def __bool__(self) -> bool:
method __iter__ (line 91) | def __iter__(self) -> Iterator[Tuple[str, float]]:
method get_penalty (line 94) | def get_penalty(self, value: str, default: float = 1000.0) -> float:
class WeightedCategories (line 106) | class WeightedCategories:
method __bool__ (line 112) | def __bool__(self) -> bool:
method __iter__ (line 115) | def __iter__(self) -> Iterator[Tuple[Tuple[str, str], float]]:
method get_penalty (line 118) | def get_penalty(self, value: Tuple[str, str], default: float = 1000.0)...
method sql_restrict (line 128) | def sql_restrict(self, table: SaFromClause) -> SaExpression:
class RankedTokens (line 144) | class RankedTokens:
method with_token (line 150) | def with_token(self, t: Token, transition_penalty: float) -> 'RankedTo...
class FieldRanking (line 160) | class FieldRanking:
method normalize_penalty (line 169) | def normalize_penalty(self) -> float:
method sql_penalty (line 183) | def sql_penalty(self, table: SaFromClause) -> SaColumn:
class FieldLookup (line 202) | class FieldLookup:
method sql_condition (line 213) | def sql_condition(self, table: SaFromClause) -> SaColumn:
class SearchData (line 219) | class SearchData:
method set_strings (line 234) | def set_strings(self, field: str, tokens: List[Token]) -> None:
method set_countries (line 247) | def set_countries(self, tokens: List[Token]) -> None:
method set_qualifiers (line 262) | def set_qualifiers(self, tokens: List[Token]) -> None:
method set_ranking (line 277) | def set_ranking(self, rankings: List[FieldRanking]) -> None:
function lookup_by_any_name (line 289) | def lookup_by_any_name(name_tokens: List[int], addr_restrict_tokens: Lis...
FILE: src/nominatim_api/search/db_search_lookups.py
class LookupAll (line 22) | class LookupAll(LookupType):
method __init__ (line 28) | def __init__(self, table: SaFromClause, column: str, tokens: List[int]...
function _default_lookup_all (line 34) | def _default_lookup_all(element: LookupAll,
function _sqlite_lookup_all (line 42) | def _sqlite_lookup_all(element: LookupAll,
class LookupAny (line 60) | class LookupAny(LookupType):
method __init__ (line 66) | def __init__(self, table: SaFromClause, column: str, tokens: List[int]...
function _default_lookup_any (line 72) | def _default_lookup_any(element: LookupAny,
function _sqlite_lookup_any (line 80) | def _sqlite_lookup_any(element: LookupAny,
class Restrict (line 92) | class Restrict(LookupType):
method __init__ (line 98) | def __init__(self, table: SaFromClause, column: str, tokens: List[int]...
function _default_restrict (line 104) | def _default_restrict(element: Restrict,
function _sqlite_restrict (line 112) | def _sqlite_restrict(element: Restrict,
FILE: src/nominatim_api/search/db_searches/address_search.py
function _int_list_to_subquery (line 33) | def _int_list_to_subquery(inp: List[int]) -> 'sa.Subquery':
function _interpolated_position (line 42) | def _interpolated_position(table: SaFromClause, nr: SaColumn) -> SaColumn:
function _make_interpolation_subquery (line 49) | def _make_interpolation_subquery(table: SaFromClause, inner: SaFromClause,
function _get_placex_housenumbers (line 70) | async def _get_placex_housenumbers(conn: SearchConnection,
function _get_osmline (line 86) | async def _get_osmline(conn: SearchConnection, place_ids: List[int],
function _get_tiger (line 108) | async def _get_tiger(conn: SearchConnection, place_ids: List[int],
class AddressSearch (line 130) | class AddressSearch(base.AbstractSearch):
method __init__ (line 135) | def __init__(self, extra_penalty: float, sdata: SearchData,
method _inner_search_name_cte (line 148) | def _inner_search_name_cte(self, conn: SearchConnection,
method lookup (line 204) | async def lookup(self, conn: SearchConnection,
FILE: src/nominatim_api/search/db_searches/base.py
class AbstractSearch (line 22) | class AbstractSearch(abc.ABC):
method __init__ (line 27) | def __init__(self, penalty: float) -> None:
method lookup (line 31) | async def lookup(self, conn: SearchConnection, details: SearchDetails)...
function select_placex (line 36) | def select_placex(t: SaFromClause) -> SaSelect:
function exclude_places (line 53) | def exclude_places(t: SaFromClause) -> Callable[[], SaExpression]:
function filter_by_layer (line 62) | def filter_by_layer(table: SaFromClause, layers: DataLayer) -> SaColumn:
function no_index (line 98) | def no_index(expr: SaColumn) -> SaColumn:
function filter_by_area (line 105) | def filter_by_area(sql: SaSelect, t: SaFromClause,
function add_geometry_columns (line 127) | def add_geometry_columns(sql: SaLambdaSelect, col: SaColumn, details: Se...
FILE: src/nominatim_api/search/db_searches/country_search.py
class CountrySearch (line 20) | class CountrySearch(base.AbstractSearch):
method __init__ (line 25) | def __init__(self, sdata: SearchData) -> None:
method lookup (line 29) | async def lookup(self, conn: SearchConnection,
method lookup_in_country_table (line 72) | async def lookup_in_country_table(self, conn: SearchConnection,
FILE: src/nominatim_api/search/db_searches/near_search.py
class NearSearch (line 28) | class NearSearch(base.AbstractSearch):
method __init__ (line 31) | def __init__(self, penalty: float, categories: WeightedCategories,
method lookup (line 37) | async def lookup(self, conn: SearchConnection,
method lookup_category (line 75) | async def lookup_category(self, results: nres.SearchResults,
FILE: src/nominatim_api/search/db_searches/place_search.py
class PlaceSearch (line 33) | class PlaceSearch(base.AbstractSearch):
method __init__ (line 38) | def __init__(self, extra_penalty: float, sdata: SearchData,
method _inner_search_name_cte (line 50) | def _inner_search_name_cte(self, conn: SearchConnection,
method lookup (line 134) | async def lookup(self, conn: SearchConnection,
FILE: src/nominatim_api/search/db_searches/poi_search.py
class PoiSearch (line 29) | class PoiSearch(base.AbstractSearch):
method __init__ (line 32) | def __init__(self, sdata: SearchData) -> None:
method lookup (line 37) | async def lookup(self, conn: SearchConnection,
FILE: src/nominatim_api/search/db_searches/postcode_search.py
class PostcodeSearch (line 28) | class PostcodeSearch(base.AbstractSearch):
method __init__ (line 31) | def __init__(self, extra_penalty: float, sdata: SearchData) -> None:
method lookup (line 38) | async def lookup(self, conn: SearchConnection,
FILE: src/nominatim_api/search/geocoder.py
class ForwardGeocoder (line 29) | class ForwardGeocoder:
method __init__ (line 33) | def __init__(self, conn: SearchConnection,
method limit (line 41) | def limit(self) -> int:
method _resolve_excluded_osm_ids (line 46) | async def _resolve_excluded_osm_ids(self) -> None:
method build_searches (line 76) | async def build_searches(self,
method execute_searches (line 105) | async def execute_searches(self, query: QueryStruct,
method pre_filter_results (line 149) | def pre_filter_results(self, results: SearchResults) -> SearchResults:
method sort_and_cut_results (line 159) | def sort_and_cut_results(self, results: SearchResults) -> SearchResults:
method rerank_by_query (line 178) | def rerank_by_query(self, query: QueryStruct, results: SearchResults) ...
method lookup_pois (line 221) | async def lookup_pois(self, categories: List[Tuple[str, str]],
method lookup (line 252) | async def lookup(self, phrases: List[Phrase]) -> SearchResults:
function _dump_searches (line 280) | def _dump_searches(searches: List[AbstractSearch], query: QueryStruct,
FILE: src/nominatim_api/search/icu_tokenizer.py
class ICUToken (line 52) | class ICUToken(qmod.Token):
method get_category (line 58) | def get_category(self) -> Tuple[str, str]:
method get_country (line 62) | def get_country(self) -> str:
method match_penalty (line 66) | def match_penalty(self, norm: str) -> float:
method from_db_row (line 85) | def from_db_row(row: SaRow) -> 'ICUToken':
class ICUAnalyzerConfig (line 121) | class ICUAnalyzerConfig:
method create (line 128) | async def create(conn: SearchConnection) -> 'ICUAnalyzerConfig':
class ICUQueryAnalyzer (line 155) | class ICUQueryAnalyzer(AbstractQueryAnalyzer):
method __init__ (line 159) | def __init__(self, conn: SearchConnection, config: ICUAnalyzerConfig) ...
method analyze_query (line 166) | async def analyze_query(self, phrases: List[qmod.Phrase]) -> qmod.Quer...
method normalize_text (line 219) | def normalize_text(self, text: str) -> str:
method split_transliteration (line 226) | def split_transliteration(self, trans: str, word: str) -> list[tuple[s...
method split_query (line 254) | def split_query(self, query: qmod.QueryStruct) -> None:
method lookup_in_db (line 275) | async def lookup_in_db(self, words: List[str]) -> 'sa.Result[Any]':
method add_extra_tokens (line 286) | def add_extra_tokens(self, query: qmod.QueryStruct) -> None:
method rerank_tokens (line 302) | def rerank_tokens(self, query: qmod.QueryStruct) -> None:
method compute_break_penalties (line 342) | def compute_break_penalties(self, query: qmod.QueryStruct) -> None:
function _dump_word_tokens (line 349) | def _dump_word_tokens(query: qmod.QueryStruct) -> Iterator[List[Any]]:
function create_query_analyzer (line 363) | async def create_query_analyzer(conn: SearchConnection) -> AbstractQuery...
FILE: src/nominatim_api/search/postcode_parser.py
class PostcodeParser (line 20) | class PostcodeParser:
method __init__ (line 27) | def __init__(self, config: Configuration) -> None:
method parse (line 50) | def parse(self, query: qmod.QueryStruct) -> Set[Tuple[int, int, str]]:
method _match_word (line 85) | def _match_word(self, word: str, pos: int, fullmatch: bool,
FILE: src/nominatim_api/search/query.py
function _phrase_compatible_with (line 92) | def _phrase_compatible_with(ptype: PhraseType, ttype: TokenType,
class Token (line 113) | class Token(ABC):
method get_category (line 125) | def get_category(self) -> Tuple[str, str]:
method get_country (line 131) | def get_country(self) -> str:
class TokenRange (line 138) | class TokenRange:
method __lt__ (line 144) | def __lt__(self, other: 'TokenRange') -> bool:
method __le__ (line 147) | def __le__(self, other: 'TokenRange') -> bool:
method __gt__ (line 150) | def __gt__(self, other: 'TokenRange') -> bool:
method __ge__ (line 153) | def __ge__(self, other: 'TokenRange') -> bool:
method replace_start (line 156) | def replace_start(self, new_start: int) -> 'TokenRange':
method replace_end (line 161) | def replace_end(self, new_end: int) -> 'TokenRange':
method split (line 166) | def split(self, index: int) -> Tuple['TokenRange', 'TokenRange']:
class TokenList (line 174) | class TokenList:
method add_penalty (line 181) | def add_penalty(self, penalty: float) -> None:
class QueryNode (line 189) | class QueryNode:
method word_break_penalty (line 221) | def word_break_penalty(self) -> float:
method word_continuation_penalty (line 227) | def word_continuation_penalty(self) -> float:
method name_address_ratio (line 233) | def name_address_ratio(self) -> float:
method has_tokens (line 242) | def has_tokens(self, end: int, *ttypes: TokenType) -> bool:
method get_tokens (line 248) | def get_tokens(self, end: int, ttype: TokenType) -> Optional[List[Toke...
class Phrase (line 260) | class Phrase:
class QueryStruct (line 268) | class QueryStruct:
method __init__ (line 288) | def __init__(self, source: List[Phrase]) -> None:
method num_token_slots (line 295) | def num_token_slots(self) -> int:
method add_node (line 300) | def add_node(self, btype: BreakType, ptype: PhraseType,
method add_token (line 308) | def add_token(self, trange: TokenRange, ttype: TokenType, token: Token...
method compute_direction_penalty (line 333) | def compute_direction_penalty(self) -> None:
method get_tokens (line 348) | def get_tokens(self, trange: TokenRange, ttype: TokenType) -> List[Tok...
method get_in_word_penalty (line 358) | def get_in_word_penalty(self, trange: TokenRange) -> float:
method iter_partials (line 365) | def iter_partials(self, trange: TokenRange) -> Iterator[Token]:
method iter_tokens_by_edge (line 371) | def iter_tokens_by_edge(self) -> Iterator[Tuple[int, int, Dict[TokenTy...
method find_lookup_word_by_id (line 384) | def find_lookup_word_by_id(self, token: int) -> str:
method extract_words (line 399) | def extract_words(self, start: int = 0,
FILE: src/nominatim_api/search/query_analyzer_factory.py
class AbstractQueryAnalyzer (line 22) | class AbstractQueryAnalyzer(ABC):
method analyze_query (line 29) | async def analyze_query(self, phrases: List['Phrase']) -> 'QueryStruct':
method normalize_text (line 34) | def normalize_text(self, text: str) -> str:
function make_query_analyzer (line 41) | async def make_query_analyzer(conn: SearchConnection) -> AbstractQueryAn...
FILE: src/nominatim_api/search/token_assignment.py
class TypedRange (line 19) | class TypedRange:
class TokenAssignment (line 30) | class TokenAssignment:
method from_ranges (line 44) | def from_ranges(ranges: TypedRangeSeq) -> 'TokenAssignment':
class _TokenSequence (line 64) | class _TokenSequence:
method __init__ (line 70) | def __init__(self, seq: TypedRangeSeq,
method __str__ (line 76) | def __str__(self) -> str:
method end_pos (line 81) | def end_pos(self) -> int:
method has_types (line 86) | def has_types(self, *ttypes: qmod.TokenType) -> bool:
method is_final (line 92) | def is_final(self) -> bool:
method appendable (line 100) | def appendable(self, ttype: qmod.TokenType) -> Optional[int]:
method advance (line 184) | def advance(self, ttype: qmod.TokenType, end_pos: int,
method _adapt_penalty_from_priors (line 210) | def _adapt_penalty_from_priors(self, priors: int, new_dir: int) -> bool:
method recheck_sequence (line 222) | def recheck_sequence(self) -> bool:
method _get_assignments_postcode (line 249) | def _get_assignments_postcode(self, base: TokenAssignment,
method _get_assignments_address_forward (line 267) | def _get_assignments_address_forward(self, base: TokenAssignment,
method _get_assignments_address_backward (line 312) | def _get_assignments_address_backward(self, base: TokenAssignment,
method get_assignments (line 357) | def get_assignments(self, query: qmod.QueryStruct) -> Iterator[TokenAs...
function yield_token_assignments (line 402) | def yield_token_assignments(query: qmod.QueryStruct) -> Iterator[TokenAs...
function _append_state_to_todo (line 432) | def _append_state_to_todo(query: qmod.QueryStruct, todo: List[_TokenSequ...
FILE: src/nominatim_api/server/asgi_adaptor.py
class ASGIAdaptor (line 21) | class ASGIAdaptor(abc.ABC):
method get (line 28) | def get(self, name: str, default: Optional[str] = None) -> Optional[str]:
method get_header (line 34) | def get_header(self, name: str, default: Optional[str] = None) -> Opti...
method error (line 40) | def error(self, msg: str, status: int = 400) -> Exception:
method create_response (line 46) | def create_response(self, status: int, output: str, num_results: int) ...
method base_uri (line 58) | def base_uri(self) -> str:
method config (line 63) | def config(self) -> Configuration:
method formatting (line 68) | def formatting(self) -> FormatDispatcher:
method query_stats (line 73) | def query_stats(self) -> Optional[QueryStatistics]:
method get_int (line 78) | def get_int(self, name: str, default: Optional[int] = None) -> int:
method get_float (line 101) | def get_float(self, name: str, default: Optional[float] = None) -> float:
method get_bool (line 127) | def get_bool(self, name: str, default: Optional[bool] = None) -> bool:
method raise_error (line 145) | def raise_error(self, msg: str, status: int = 400) -> NoReturn:
FILE: src/nominatim_api/server/falcon/server.py
class HTTPNominatimError (line 28) | class HTTPNominatimError(Exception):
method __init__ (line 31) | def __init__(self, msg: str, status: int, content_type: str) -> None:
function nominatim_error_handler (line 37) | async def nominatim_error_handler(req: Request, resp: Response,
function timeout_error_handler (line 48) | async def timeout_error_handler(req: Request, resp: Response,
class ParamWrapper (line 66) | class ParamWrapper(ASGIAdaptor):
method __init__ (line 70) | def __init__(self, req: Request, resp: Response,
method get (line 77) | def get(self, name: str, default: Optional[str] = None) -> Optional[str]:
method get_header (line 80) | def get_header(self, name: str, default: Optional[str] = None) -> Opti...
method error (line 83) | def error(self, msg: str, status: int = 400) -> HTTPNominatimError:
method create_response (line 86) | def create_response(self, status: int, output: str, num_results: int) ...
method base_uri (line 92) | def base_uri(self) -> str:
method config (line 95) | def config(self) -> Configuration:
method formatting (line 98) | def formatting(self) -> FormatDispatcher:
method query_stats (line 101) | def query_stats(self) -> Optional[QueryStatistics]:
class EndpointWrapper (line 105) | class EndpointWrapper:
method __init__ (line 109) | def __init__(self, name: str, func: EndpointFunc, api: NominatimAPIAsync,
method on_get (line 116) | async def on_get(self, req: Request, resp: Response) -> None:
class FileLoggingMiddleware (line 123) | class FileLoggingMiddleware:
method __init__ (line 127) | def __init__(self, file_name: str, logstr: str):
method process_request (line 131) | async def process_request(self, req: Request, _: Response) -> None:
method process_response (line 136) | async def process_response(self, req: Request, resp: Response,
class APIMiddleware (line 160) | class APIMiddleware:
method __init__ (line 164) | def __init__(self, project_dir: Path, environ: Optional[Mapping[str, s...
method config (line 169) | def config(self) -> Configuration:
method set_app (line 174) | def set_app(self, app: App[Request, Response]) -> None:
method process_startup (line 179) | async def process_startup(self, *_: Any) -> None:
method process_shutdown (line 195) | async def process_shutdown(self, *_: Any) -> None:
function get_application (line 201) | def get_application(project_dir: Path,
function run_wsgi (line 224) | def run_wsgi() -> App[Request, Response]:
FILE: src/nominatim_api/server/starlette/server.py
class ParamWrapper (line 35) | class ParamWrapper(ASGIAdaptor):
method __init__ (line 39) | def __init__(self, request: Request) -> None:
method get (line 42) | def get(self, name: str, default: Optional[str] = None) -> Optional[str]:
method get_header (line 45) | def get_header(self, name: str, default: Optional[str] = None) -> Opti...
method error (line 48) | def error(self, msg: str, status: int = 400) -> HTTPException:
method create_response (line 52) | def create_response(self, status: int, output: str, num_results: int) ...
method base_uri (line 56) | def base_uri(self) -> str:
method config (line 68) | def config(self) -> Configuration:
method formatting (line 71) | def formatting(self) -> FormatDispatcher:
method query_stats (line 74) | def query_stats(self) -> Optional[QueryStatistics]:
function _wrap_endpoint (line 78) | def _wrap_endpoint(func: EndpointFunc)\
class FileLoggingMiddleware (line 86) | class FileLoggingMiddleware(BaseHTTPMiddleware):
method __init__ (line 90) | def __init__(self, app: Starlette, file_name: str = '', logstr: str = ...
method dispatch (line 95) | async def dispatch(self, request: Request,
function timeout_error (line 123) | async def timeout_error(request: Request,
function get_application (line 136) | def get_application(project_dir: Path,
function run_wsgi (line 185) | def run_wsgi() -> Starlette:
FILE: src/nominatim_api/sql/sqlalchemy_functions.py
class PlacexGeometryReverseLookuppolygon (line 19) | class PlacexGeometryReverseLookuppolygon(sa.sql.functions.GenericFunctio...
function _default_intersects (line 31) | def _default_intersects(element: PlacexGeometryReverseLookuppolygon,
function _sqlite_intersects (line 41) | def _sqlite_intersects(element: PlacexGeometryReverseLookuppolygon,
class IntersectsReverseDistance (line 50) | class IntersectsReverseDistance(sa.sql.functions.GenericFunction[Any]):
method __init__ (line 54) | def __init__(self, table: sa.Table, geom: SaColumn) -> None:
function default_reverse_place_diameter (line 61) | def default_reverse_place_diameter(element: IntersectsReverseDistance,
function sqlite_reverse_place_diameter (line 73) | def sqlite_reverse_place_diameter(element: IntersectsReverseDistance,
class IsBelowReverseDistance (line 94) | class IsBelowReverseDistance(sa.sql.functions.GenericFunction[Any]):
function default_is_below_reverse_distance (line 100) | def default_is_below_reverse_distance(element: IsBelowReverseDistance,
function sqlite_is_below_reverse_distance (line 108) | def sqlite_is_below_reverse_distance(element: IsBelowReverseDistance,
class IsAddressPoint (line 115) | class IsAddressPoint(sa.sql.functions.GenericFunction[Any]):
method __init__ (line 119) | def __init__(self, table: sa.Table) -> None:
function default_is_address_point (line 125) | def default_is_address_point(element: IsAddressPoint,
function sqlite_is_address_point (line 138) | def sqlite_is_address_point(element: IsAddressPoint,
class CrosscheckNames (line 149) | class CrosscheckNames(sa.sql.functions.GenericFunction[Any]):
function compile_crosscheck_names (line 158) | def compile_crosscheck_names(element: CrosscheckNames,
function compile_sqlite_crosscheck_names (line 166) | def compile_sqlite_crosscheck_names(element: CrosscheckNames,
class JsonArrayEach (line 175) | class JsonArrayEach(sa.sql.functions.GenericFunction[Any]):
function default_json_array_each (line 183) | def default_json_array_each(element: JsonArrayEach, compiler: 'sa.Compil...
function sqlite_json_array_each (line 188) | def sqlite_json_array_each(element: JsonArrayEach, compiler: 'sa.Compile...
class Greatest (line 192) | class Greatest(sa.sql.functions.GenericFunction[Any]):
function sqlite_greatest (line 200) | def sqlite_greatest(element: Greatest, compiler: 'sa.Compiled', **kw: An...
class RegexpWord (line 204) | class RegexpWord(sa.sql.functions.GenericFunction[Any]):
function postgres_regexp_nocase (line 212) | def postgres_regexp_nocase(element: RegexpWord, compiler: 'sa.Compiled',...
function sqlite_regexp_nocase (line 219) | def sqlite_regexp_nocase(element: RegexpWord, compiler: 'sa.Compiled', *...
FILE: src/nominatim_api/sql/sqlalchemy_schema.py
class SearchTables (line 15) | class SearchTables:
method __init__ (line 22) | def __init__(self, meta: sa.MetaData) -> None:
FILE: src/nominatim_api/sql/sqlalchemy_types/geometry.py
class Geometry_DistanceSpheroid (line 20) | class Geometry_DistanceSpheroid(sa.sql.expression.FunctionElement[float]):
function _default_distance_spheroid (line 29) | def _default_distance_spheroid(element: Geometry_DistanceSpheroid,
function _spatialite_distance_spheroid (line 37) | def _spatialite_distance_spheroid(element: Geometry_DistanceSpheroid,
class Geometry_IsLineLike (line 42) | class Geometry_IsLineLike(sa.sql.expression.FunctionElement[Any]):
function _default_is_line_like (line 50) | def _default_is_line_like(element: Geometry_IsLineLike,
function _sqlite_is_line_like (line 57) | def _sqlite_is_line_like(element: Geometry_IsLineLike,
class Geometry_IsAreaLike (line 63) | class Geometry_IsAreaLike(sa.sql.expression.FunctionElement[Any]):
function _default_is_area_like (line 71) | def _default_is_area_like(element: Geometry_IsAreaLike,
function _sqlite_is_area_like (line 78) | def _sqlite_is_area_like(element: Geometry_IsAreaLike,
class Geometry_IntersectsBbox (line 84) | class Geometry_IntersectsBbox(sa.sql.expression.FunctionElement[Any]):
function _default_intersects (line 92) | def _default_intersects(element: Geometry_IntersectsBbox,
function _sqlite_intersects (line 99) | def _sqlite_intersects(element: Geometry_IntersectsBbox,
class Geometry_ColumnIntersectsBbox (line 104) | class Geometry_ColumnIntersectsBbox(sa.sql.expression.FunctionElement[An...
function default_intersects_column (line 115) | def default_intersects_column(element: Geometry_ColumnIntersectsBbox,
function spatialite_intersects_column (line 122) | def spatialite_intersects_column(element: Geometry_ColumnIntersectsBbox,
class Geometry_ColumnDWithin (line 135) | class Geometry_ColumnDWithin(sa.sql.expression.FunctionElement[Any]):
function default_dwithin_column (line 146) | def default_dwithin_column(element: Geometry_ColumnDWithin,
function spatialite_dwithin_column (line 152) | def spatialite_dwithin_column(element: Geometry_ColumnDWithin,
class Geometry (line 167) | class Geometry(types.UserDefinedType): # type: ignore[type-arg]
method __init__ (line 173) | def __init__(self, subtype: str = 'Geometry'):
method get_col_spec (line 176) | def get_col_spec(self, **_: Any) -> str:
method bind_processor (line 179) | def bind_processor(self, dialect: 'sa.Dialect') -> Callable[[Any], str]:
method result_processor (line 189) | def result_processor(self, dialect: 'sa.Dialect', coltype: object) -> ...
method column_expression (line 195) | def column_expression(self, col: SaColumn) -> SaColumn:
method bind_expression (line 198) | def bind_expression(self, bindvalue: SaBind) -> SaColumn:
class comparator_factory (line 201) | class comparator_factory(types.UserDefinedType.Comparator): # type: i...
method intersects (line 203) | def intersects(self, other: SaColumn, use_index: bool = True) -> 'sa...
method is_line_like (line 212) | def is_line_like(self) -> SaColumn:
method is_area (line 215) | def is_area(self) -> SaColumn:
method within_distance (line 218) | def within_distance(self, other: SaColumn, distance: SaColumn) -> Sa...
method ST_Distance (line 224) | def ST_Distance(self, other: SaColumn) -> SaColumn:
method ST_Contains (line 227) | def ST_Contains(self, other: SaColumn) -> SaColumn:
method ST_CoveredBy (line 230) | def ST_CoveredBy(self, other: SaColumn) -> SaColumn:
method ST_ClosestPoint (line 233) | def ST_ClosestPoint(self, other: SaColumn) -> SaColumn:
method ST_Buffer (line 237) | def ST_Buffer(self, other: SaColumn) -> SaColumn:
method ST_Expand (line 240) | def ST_Expand(self, other: SaColumn) -> SaColumn:
method ST_Collect (line 243) | def ST_Collect(self) -> SaColumn:
method ST_Centroid (line 246) | def ST_Centroid(self) -> SaColumn:
method ST_LineInterpolatePoint (line 249) | def ST_LineInterpolatePoint(self, other: SaColumn) -> SaColumn:
method ST_LineLocatePoint (line 252) | def ST_LineLocatePoint(self, other: SaColumn) -> SaColumn:
method distance_spheroid (line 255) | def distance_spheroid(self, other: SaColumn) -> SaColumn:
function get_col_spec (line 260) | def get_col_spec(self, *args, **kwargs): # type: ignore[no-untyped-def]
function _add_function_alias (line 275) | def _add_function_alias(func: str, ftype: type, alias: str) -> None:
FILE: src/nominatim_api/sql/sqlalchemy_types/int_array.py
class IntList (line 19) | class IntList(sa.types.TypeDecorator[Any]):
method process_bind_param (line 25) | def process_bind_param(self, value: Optional[Any], dialect: 'sa.Dialec...
method process_result_value (line 32) | def process_result_value(self, value: Optional[Any],
class IntArray (line 37) | class IntArray(sa.types.TypeDecorator[Any]):
method load_dialect_impl (line 43) | def load_dialect_impl(self, dialect: SaDialect) -> sa.types.TypeEngine...
class comparator_factory (line 49) | class comparator_factory(sa.types.UserDefinedType.Comparator): # type...
method __add__ (line 51) | def __add__(self, other: SaColumn) -> 'sa.ColumnOperators':
method contains (line 57) | def contains(self, other: SaColumn, **kwargs: Any) -> 'sa.ColumnOper...
class ArrayAgg (line 64) | class ArrayAgg(sa.sql.functions.GenericFunction[Any]):
function sqlite_array_agg (line 74) | def sqlite_array_agg(element: ArrayAgg, compiler: 'sa.Compiled', **kw: A...
class ArrayContains (line 78) | class ArrayContains(sa.sql.expression.FunctionElement[Any]):
function generic_array_contains (line 86) | def generic_array_contains(element: ArrayContains, compiler: 'sa.Compile...
function sqlite_array_contains (line 93) | def sqlite_array_contains(element: ArrayContains, compiler: 'sa.Compiled...
class ArrayCat (line 97) | class ArrayCat(sa.sql.expression.FunctionElement[Any]):
function generic_array_cat (line 106) | def generic_array_cat(element: ArrayCat, compiler: 'sa.Compiled', **kw: ...
function sqlite_array_cat (line 111) | def sqlite_array_cat(element: ArrayCat, compiler: 'sa.Compiled', **kw: A...
FILE: src/nominatim_api/sql/sqlalchemy_types/json.py
class Json (line 19) | class Json(sa.types.TypeDecorator[Any]):
method load_dialect_impl (line 25) | def load_dialect_impl(self, dialect: SaDialect) -> sa.types.TypeEngine...
FILE: src/nominatim_api/sql/sqlalchemy_types/key_value.py
class KeyValueStore (line 20) | class KeyValueStore(sa.types.TypeDecorator[Any]):
method load_dialect_impl (line 26) | def load_dialect_impl(self, dialect: SaDialect) -> sa.types.TypeEngine...
class comparator_factory (line 32) | class comparator_factory(sa.types.UserDefinedType.Comparator): # type...
method merge (line 34) | def merge(self, other: SaColumn) -> 'sa.Operators':
class KeyValueConcat (line 42) | class KeyValueConcat(sa.sql.expression.FunctionElement[Any]):
function default_json_concat (line 51) | def default_json_concat(element: KeyValueConcat, compiler: 'sa.Compiled'...
function sqlite_json_concat (line 58) | def sqlite_json_concat(element: KeyValueConcat, compiler: 'sa.Compiled',...
FILE: src/nominatim_api/sql/sqlite_functions.py
function weigh_search (line 14) | def weigh_search(search_vector: Optional[str], rankings: str, default: f...
class ArrayIntersectFuzzy (line 26) | class ArrayIntersectFuzzy:
method __init__ (line 33) | def __init__(self) -> None:
method step (line 37) | def step(self, value: Optional[str]) -> None:
method finalize (line 48) | def finalize(self) -> str:
class ArrayUnion (line 57) | class ArrayUnion:
method __init__ (line 62) | def __init__(self) -> None:
method step (line 65) | def step(self, value: Optional[str]) -> None:
method finalize (line 74) | def finalize(self) -> str:
function array_contains (line 80) | def array_contains(container: Optional[str], containee: Optional[str]) -...
function array_pair_contains (line 90) | def array_pair_contains(container1: Optional[str], container2: Optional[...
function install_custom_functions (line 102) | def install_custom_functions(conn: Any) -> None:
function _make_aggregate (line 113) | async def _make_aggregate(aioconn: Any, *args: Any) -> None:
function _create_aggregate (line 117) | def _create_aggregate(conn: Any, name: str, nargs: int, aggregate: Any) ...
FILE: src/nominatim_api/status.py
class StatusResult (line 21) | class StatusResult:
function get_status (line 31) | async def get_status(conn: SearchConnection) -> StatusResult:
FILE: src/nominatim_api/timeout.py
class Timeout (line 14) | class Timeout:
method __init__ (line 18) | def __init__(self, timeout: Optional[Union[int, float]]) -> None:
method is_elapsed (line 21) | def is_elapsed(self) -> bool:
FILE: src/nominatim_api/types.py
class PlaceID (line 26) | class PlaceID:
method __str__ (line 39) | def __str__(self) -> str:
class OsmID (line 44) | class OsmID:
method __str__ (line 65) | def __str__(self) -> str:
method __post_init__ (line 68) | def __post_init__(self) -> None:
method class_as_housenumber (line 72) | def class_as_housenumber(self) -> Optional[int]:
class Point (line 87) | class Point(NamedTuple):
method lat (line 94) | def lat(self) -> float:
method lon (line 100) | def lon(self) -> float:
method to_geojson (line 105) | def to_geojson(self) -> str:
method from_wkb (line 111) | def from_wkb(wkb: Union[str, bytes]) -> 'Point':
method from_param (line 133) | def from_param(inp: Any) -> 'Point':
method to_wkt (line 160) | def to_wkt(self) -> str:
class Bbox (line 172) | class Bbox:
method __init__ (line 178) | def __init__(self, minx: float, miny: float, maxx: float, maxy: float)...
method minlat (line 185) | def minlat(self) -> float:
method maxlat (line 191) | def maxlat(self) -> float:
method minlon (line 197) | def minlon(self) -> float:
method maxlon (line 203) | def maxlon(self) -> float:
method area (line 209) | def area(self) -> float:
method contains (line 214) | def contains(self, pt: Point) -> bool:
method to_wkt (line 220) | def to_wkt(self) -> str:
method from_wkb (line 228) | def from_wkb(wkb: Union[None, str, bytes]) -> 'Optional[Bbox]':
method from_point (line 250) | def from_point(pt: Point, buffer: float) -> 'Bbox':
method from_param (line 257) | def from_param(inp: Any) -> 'Bbox':
class GeometryFormat (line 289) | class GeometryFormat(enum.Flag):
class DataLayer (line 316) | class DataLayer(enum.Flag):
class QueryStatistics (line 346) | class QueryStatistics(dict[str, Any]):
method __enter__ (line 350) | def __enter__(self) -> 'QueryStatistics':
method __exit__ (line 354) | def __exit__(self, *_: Any) -> None:
method __missing__ (line 364) | def __missing__(self, key: str) -> str:
method log_time (line 367) | def log_time(self, key: str) -> None:
class NoQueryStats (line 371) | class NoQueryStats:
method __enter__ (line 375) | def __enter__(self) -> 'NoQueryStats':
method __exit__ (line 378) | def __exit__(self, *_: Any) -> None:
method __setitem__ (line 381) | def __setitem__(self, key: str, value: Any) -> None:
method __getitem__ (line 384) | def __getitem__(self, key: str) -> Any:
method __contains__ (line 387) | def __contains__(self, key: str, default: Any = None) -> bool:
method log_time (line 390) | def log_time(self, key: str) -> None:
function format_country (line 394) | def format_country(cc: Any) -> List[str]:
function format_excluded (line 411) | def format_excluded(ids: Any) -> List[PlaceRef]:
function format_categories (line 450) | def format_categories(categories: List[Tuple[str, str]]) -> List[Tuple[s...
class LookupDetails (line 460) | class LookupDetails:
method from_kwargs (line 498) | def from_kwargs(cls: Type[TParam], kwargs: Dict[str, Any]) -> TParam:
class ReverseDetails (line 522) | class ReverseDetails(LookupDetails):
class SearchDetails (line 537) | class SearchDetails(LookupDetails):
method __post_init__ (line 609) | def __post_init__(self) -> None:
method excluded_place_ids (line 617) | def excluded_place_ids(self) -> List[int]:
method restrict_min_max_rank (line 624) | def restrict_min_max_rank(self, new_min: int, new_max: int) -> None:
method is_impossible (line 632) | def is_impossible(self) -> bool:
method layer_enabled (line 644) | def layer_enabled(self, layer: DataLayer) -> bool:
class EntranceDetails (line 652) | class EntranceDetails:
FILE: src/nominatim_api/utils/json_writer.py
class JsonWriter (line 20) | class JsonWriter:
method __init__ (line 33) | def __init__(self) -> None:
method __call__ (line 37) | def __call__(self) -> str:
method start_object (line 47) | def start_object(self) -> 'JsonWriter':
method end_object (line 55) | def end_object(self) -> 'JsonWriter':
method start_array (line 64) | def start_array(self) -> 'JsonWriter':
method end_array (line 72) | def end_array(self) -> 'JsonWriter':
method key (line 81) | def key(self, name: str) -> 'JsonWriter':
method value (line 90) | def value(self, value: Any) -> 'JsonWriter':
method float (line 97) | def float(self, value: float, precision: int) -> 'JsonWriter':
method next (line 102) | def next(self) -> 'JsonWriter':
method raw (line 110) | def raw(self, raw_json: str) -> 'JsonWriter':
method keyval (line 120) | def keyval(self, key: str, value: Any) -> 'JsonWriter':
method keyval_not_none (line 128) | def keyval_not_none(self, key: str, value: Optional[T],
FILE: src/nominatim_api/v1/classtypes.py
function get_label_tag (line 19) | def get_label_tag(category: Tuple[str, str], extratags: Optional[Mapping...
function bbox_from_result (line 46) | def bbox_from_result(result: Union[ReverseResult, SearchResult]) -> Bbox:
FILE: src/nominatim_api/v1/format.py
class RawDataList (line 27) | class RawDataList(List[Dict[str, Any]]):
function _format_error (line 38) | def _format_error(content_type: str, msg: str, status: int) -> str:
function _format_status_text (line 60) | def _format_status_text(result: StatusResult, _: Mapping[str, Any]) -> str:
function _format_status_json (line 68) | def _format_status_json(result: StatusResult, _: Mapping[str, Any]) -> str:
function _add_address_row (line 83) | def _add_address_row(writer: JsonWriter, row: AddressLine,
function _add_address_rows (line 105) | def _add_address_rows(writer: JsonWriter, section: str, rows: AddressLines,
function _add_parent_rows_grouped (line 114) | def _add_parent_rows_grouped(writer: JsonWriter, rows: AddressLines,
function _format_details_json (line 135) | def _format_details_json(result: DetailedResult, options: Mapping[str, A...
function _format_reverse_xml (line 209) | def _format_reverse_xml(results: ReverseResults, options: Mapping[str, A...
function _format_reverse_geojson (line 216) | def _format_reverse_geojson(results: ReverseResults,
function _format_reverse_geocodejson (line 222) | def _format_reverse_geocodejson(results: ReverseResults,
function _format_reverse_json (line 228) | def _format_reverse_json(results: ReverseResults,
function _format_reverse_jsonv2 (line 235) | def _format_reverse_jsonv2(results: ReverseResults,
function _format_search_xml (line 242) | def _format_search_xml(results: SearchResults, options: Mapping[str, Any...
function _format_search_geojson (line 252) | def _format_search_geojson(results: SearchResults,
function _format_search_geocodejson (line 258) | def _format_search_geocodejson(results: SearchResults,
function _format_search_json (line 264) | def _format_search_json(results: SearchResults,
function _format_search_jsonv2 (line 271) | def _format_search_jsonv2(results: SearchResults,
function _format_raw_data_json (line 278) | def _format_raw_data_json(results: RawDataList, _: Mapping[str, Any]) -...
FILE: src/nominatim_api/v1/format_json.py
function _write_osm_id (line 19) | def _write_osm_id(out: JsonWriter, osm_object: Optional[Tuple[str, int]]...
function _write_typed_address (line 25) | def _write_typed_address(out: JsonWriter, address: Optional[AddressLines],
function _write_geocodejson_address (line 45) | def _write_geocodejson_address(out: JsonWriter,
function write_entrances (line 69) | def write_entrances(out: JsonWriter, entrances: Optional[List[EntranceDe...
function format_base_json (line 91) | def format_base_json(results: Union[ReverseResults, SearchResults],
function format_base_geojson (line 171) | def format_base_geojson(results: Union[ReverseResults, SearchResults],
function format_base_geocodejson (line 236) | def format_base_geocodejson(results: Union[ReverseResults, SearchResults],
FILE: src/nominatim_api/v1/format_xml.py
function _write_xml_address (line 21) | def _write_xml_address(root: ET.Element, address: AddressLines,
function _create_base_entry (line 41) | def _create_base_entry(result: Union[ReverseResult, SearchResult],
function _create_entrance (line 87) | def _create_entrance(root: ET.Element, entrance: EntranceDetails) -> None:
function format_base_xml (line 99) | def format_base_xml(results: Union[ReverseResults, SearchResults],
FILE: src/nominatim_api/v1/helpers.py
function _add_admin_level (line 19) | def _add_admin_level(result: BaseResult) -> Optional[Dict[str, str]]:
function zoom_to_rank (line 45) | def zoom_to_rank(zoom: int) -> int:
function feature_type_to_rank (line 59) | def feature_type_to_rank(feature_type: Optional[str]) -> Tuple[int, int]:
function extend_query_parts (line 66) | def extend_query_parts(queryparts: Dict[str, Any], details: Dict[str, Any],
function deduplicate_results (line 110) | def deduplicate_results(results: SearchResults, max_results: int) -> Sea...
function _deg (line 138) | def _deg(axis: str) -> str:
function _deg_min (line 142) | def _deg_min(axis: str) -> str:
function _deg_min_sec (line 146) | def _deg_min_sec(axis: str) -> str:
function extract_coords_from_query (line 161) | def extract_coords_from_query(query: str) -> Tuple[str, Optional[float],...
function extract_category_from_query (line 193) | def extract_category_from_query(query: str) -> Tuple[str, Optional[str],...
FILE: src/nominatim_api/v1/server_glue.py
function build_response (line 33) | def build_response(adaptor: ASGIAdaptor, output: str, status: int = 200,
function get_accepted_languages (line 49) | def get_accepted_languages(adaptor: ASGIAdaptor) -> str:
function setup_debugging (line 57) | def setup_debugging(adaptor: ASGIAdaptor) -> bool:
function get_layers (line 70) | def get_layers(adaptor: ASGIAdaptor) -> Optional[DataLayer]:
function parse_format (line 82) | def parse_format(adaptor: ASGIAdaptor, result_type: Type[Any], default: ...
function parse_geometry_details (line 100) | def parse_geometry_details(adaptor: ASGIAdaptor, fmt: str) -> Dict[str, ...
function has_search_name (line 128) | def has_search_name(conn: sa.engine.Connection) -> bool:
function status_endpoint (line 134) | async def status_endpoint(api: NominatimAPIAsync, params: ASGIAdaptor) -...
function details_endpoint (line 150) | async def details_endpoint(api: NominatimAPIAsync, params: ASGIAdaptor) ...
function reverse_endpoint (line 199) | async def reverse_endpoint(api: NominatimAPIAsync, params: ASGIAdaptor) ...
function lookup_endpoint (line 242) | async def lookup_endpoint(api: NominatimAPIAsync, params: ASGIAdaptor) -...
function _unstructured_search (line 281) | async def _unstructured_search(query: str, api: NominatimAPIAsync,
function search_endpoint (line 312) | async def search_endpoint(api: NominatimAPIAsync, params: ASGIAdaptor) -...
function deletable_endpoint (line 401) | async def deletable_endpoint(api: NominatimAPIAsync, params: ASGIAdaptor...
function polygons_endpoint (line 424) | async def polygons_endpoint(api: NominatimAPIAsync, params: ASGIAdaptor)...
function search_unavailable_endpoint (line 456) | async def search_unavailable_endpoint(api: NominatimAPIAsync, params: AS...
class LazySearchEndpoint (line 463) | class LazySearchEndpoint:
method __init__ (line 473) | def __init__(self, api: NominatimAPIAsync, real_endpoint: EndpointFunc):
method set_wrapper (line 480) | def set_wrapper(self, wrapper: Any) -> None:
method __call__ (line 483) | async def __call__(self, api: NominatimAPIAsync, params: ASGIAdaptor) ...
function get_routes (line 511) | async def get_routes(api: NominatimAPIAsync) -> Sequence[Tuple[str, Endp...
FILE: src/nominatim_db/cli.py
class CommandlineParser (line 28) | class CommandlineParser:
method __init__ (line 32) | def __init__(self, prog: str, description: Optional[str]):
method nominatim_version_text (line 60) | def nominatim_version_text(self) -> str:
method add_subcommand (line 68) | def add_subcommand(self, name: str, cmd: Subcommand) -> None:
method run (line 83) | def run(self, cli_args: Optional[List[str]],
class AdminServe (line 136) | class AdminServe:
method add_args (line 152) | def add_args(self, parser: argparse.ArgumentParser) -> None:
method run (line 160) | def run(self, args: NominatimArgs) -> int:
method run_uvicorn (line 165) | async def run_uvicorn(self, args: NominatimArgs) -> None:
function get_set_parser (line 186) | def get_set_parser() -> CommandlineParser:
function nominatim (line 232) | def nominatim(cli_args: Optional[List[str]] = None,
FILE: src/nominatim_db/clicmd/add_data.py
class UpdateAddData (line 25) | class UpdateAddData:
method add_args (line 42) | def add_args(self, parser: argparse.ArgumentParser) -> None:
method run (line 65) | def run(self, args: NominatimArgs) -> int:
method _add_tiger_data (line 102) | async def _add_tiger_data(self, args: NominatimArgs) -> int:
FILE: src/nominatim_db/clicmd/admin.py
class AdminFuncs (line 22) | class AdminFuncs:
method add_args (line 27) | def add_args(self, parser: argparse.ArgumentParser) -> None:
method run (line 56) | def run(self, args: NominatimArgs) -> int:
method _warm (line 90) | def _warm(self, args: NominatimArgs) -> int:
FILE: src/nominatim_db/clicmd/api.py
function _add_list_format (line 50) | def _add_list_format(parser: argparse.ArgumentParser) -> None:
function _add_api_output_arguments (line 56) | def _add_api_output_arguments(parser: argparse.ArgumentParser) -> None:
function _get_geometry_output (line 74) | def _get_geometry_output(args: NominatimArgs) -> napi.GeometryFormat:
function _get_locales (line 95) | def _get_locales(args: NominatimArgs, config: Configuration) -> napi.Loc...
function _get_layers (line 107) | def _get_layers(args: NominatimArgs, default: Optional[napi.DataLayer]) ...
function _list_formats (line 117) | def _list_formats(formatter: napi.FormatDispatcher, rtype: Type[Any]) ->...
function _print_output (line 126) | def _print_output(formatter: napi.FormatDispatcher, result: Any,
class APISearch (line 146) | class APISearch:
method add_args (line 156) | def add_args(self, parser: argparse.ArgumentParser) -> None:
method run (line 184) | def run(self, args: NominatimArgs) -> int:
class APIReverse (line 244) | class APIReverse:
method add_args (line 254) | def add_args(self, parser: argparse.ArgumentParser) -> None:
method run (line 270) | def run(self, args: NominatimArgs) -> int:
class APILookup (line 319) | class APILookup:
method add_args (line 329) | def add_args(self, parser: argparse.ArgumentParser) -> None:
method run (line 338) | def run(self, args: NominatimArgs) -> int:
class APIDetails (line 379) | class APIDetails:
method add_args (line 389) | def add_args(self, parser: argparse.ArgumentParser) -> None:
method run (line 424) | def run(self, args: NominatimArgs) -> int:
class APIStatus (line 480) | class APIStatus:
method add_args (line 490) | def add_args(self, parser: argparse.ArgumentParser) -> None:
method run (line 496) | def run(self, args: NominatimArgs) -> int:
FILE: src/nominatim_db/clicmd/args.py
class Subcommand (line 23) | class Subcommand(Protocol):
method add_args (line 28) | def add_args(self, parser: argparse.ArgumentParser) -> None:
method run (line 34) | def run(self, args: 'NominatimArgs') -> int:
class NominatimArgs (line 40) | class NominatimArgs:
method osm2pgsql_options (line 187) | def osm2pgsql_options(self, default_cache: int,
method get_osm_file_list (line 207) | def get_osm_file_list(self) -> Optional[List[Path]]:
FILE: src/nominatim_db/clicmd/convert.py
class WithAction (line 19) | class WithAction(argparse.Action):
method __init__ (line 23) | def __init__(self, option_strings: Sequence[str], dest: Any,
method __call__ (line 42) | def __call__(self, parser: argparse.ArgumentParser, namespace: argpars...
class ConvertDB (line 52) | class ConvertDB:
method __init__ (line 60) | def __init__(self) -> None:
method add_args (line 63) | def add_args(self, parser: argparse.ArgumentParser) -> None:
method run (line 79) | def run(self, args: NominatimArgs) -> int:
FILE: src/nominatim_db/clicmd/export.py
class QueryExport (line 50) | class QueryExport:
method add_args (line 57) | def add_args(self, parser: argparse.ArgumentParser) -> None:
method run (line 84) | def run(self, args: NominatimArgs) -> int:
function export (line 88) | async def export(args: NominatimArgs) -> int:
function init_csv_writer (line 142) | def init_csv_writer(output_format: str) -> 'csv.DictWriter[str]':
function dump_results (line 150) | async def dump_results(conn: napi.SearchConnection,
function get_parent_id (line 174) | async def get_parent_id(conn: napi.SearchConnection, node_id: Optional[i...
FILE: src/nominatim_db/clicmd/freeze.py
class SetupFreeze (line 16) | class SetupFreeze:
method add_args (line 28) | def add_args(self, parser: argparse.ArgumentParser) -> None:
method run (line 31) | def run(self, args: NominatimArgs) -> int:
FILE: src/nominatim_db/clicmd/index.py
class UpdateIndex (line 20) | class UpdateIndex:
method add_args (line 30) | def add_args(self, parser: argparse.ArgumentParser) -> None:
method run (line 41) | def run(self, args: NominatimArgs) -> int:
method _do_index (line 51) | async def _do_index(self, args: NominatimArgs) -> None:
FILE: src/nominatim_db/clicmd/refresh.py
function _parse_osm_object (line 25) | def _parse_osm_object(obj: str) -> Tuple[str, int]:
class UpdateRefresh (line 35) | class UpdateRefresh:
method __init__ (line 47) | def __init__(self) -> None:
method add_args (line 50) | def add_args(self, parser: argparse.ArgumentParser) -> None:
method run (line 92) | def run(self, args: NominatimArgs) -> int:
method _get_tokenizer (line 184) | def _get_tokenizer(self, config: Configuration) -> AbstractTokenizer:
FILE: src/nominatim_db/clicmd/replication.py
class UpdateReplication (line 26) | class UpdateReplication:
method add_args (line 44) | def add_args(self, parser: argparse.ArgumentParser) -> None:
method _init_replication (line 70) | def _init_replication(self, args: NominatimArgs) -> int:
method _check_for_updates (line 82) | def _check_for_updates(self, args: NominatimArgs) -> int:
method _report_update (line 89) | def _report_update(self, batchdate: dt.datetime,
method _compute_update_interval (line 102) | def _compute_update_interval(self, args: NominatimArgs) -> int:
method _update (line 118) | async def _update(self, args: NominatimArgs) -> None:
method run (line 179) | def run(self, args: NominatimArgs) -> int:
FILE: src/nominatim_db/clicmd/setup.py
class SetupAll (line 31) | class SetupAll:
method add_args (line 40) | def add_args(self, parser: argparse.ArgumentParser) -> None:
method run (line 71) | def run(self, args: NominatimArgs) -> int:
method async_run (line 85) | async def async_run(self, args: NominatimArgs) -> int:
method _base_import (line 152) | def _base_import(self, args: NominatimArgs) -> None:
method _setup_tables (line 190) | def _setup_tables(self, config: Configuration, reverse_only: bool) -> ...
method _get_tokenizer (line 211) | def _get_tokenizer(self, continue_at: Optional[str],
method _finalize_database (line 224) | def _finalize_database(self, dsn: str, offline: bool) -> None:
FILE: src/nominatim_db/clicmd/special_phrases.py
class ImportSpecialPhrases (line 25) | class ImportSpecialPhrases:
method add_args (line 53) | def add_args(self, parser: argparse.ArgumentParser) -> None:
method run (line 64) | def run(self, args: NominatimArgs) -> int:
method start_import (line 78) | def start_import(self, args: NominatimArgs, loader: SpecialPhraseLoade...
FILE: src/nominatim_db/config.py
function flatten_config_list (line 32) | def flatten_config_list(content: Any, section: str = '') -> List[Any]:
class Configuration (line 52) | class Configuration:
method __init__ (line 64) | def __init__(self, project_dir: Optional[Union[Path, str]],
method set_libdirs (line 88) | def set_libdirs(self, **kwargs: StrPath) -> None:
method __getattr__ (line 94) | def __getattr__(self, name: str) -> str:
method get_bool (line 102) | def get_bool(self, name: str) -> bool:
method get_int (line 114) | def get_int(self, name: str) -> int:
method get_str_list (line 133) | def get_str_list(self, name: str) -> Optional[List[str]]:
method get_path (line 152) | def get_path(self, name: str) -> Optional[Path]:
method get_libpq_dsn (line 177) | def get_libpq_dsn(self) -> str:
method get_database_params (line 196) | def get_database_params(self) -> Mapping[str, Union[str, int, None]]:
method get_import_style_file (line 207) | def get_import_style_file(self) -> Path:
method get_os_env (line 219) | def get_os_env(self) -> Dict[str, str]:
method load_sub_configuration (line 228) | def load_sub_configuration(self, filename: StrPath,
method load_plugin_module (line 265) | def load_plugin_module(self, module_name: str, internal_path: str) -> ...
method find_config_file (line 307) | def find_config_file(self, filename: StrPath,
method _load_from_yaml (line 339) | def _load_from_yaml(self, cfgfile: Path) -> Any:
method _yaml_include_representer (line 347) | def _yaml_include_representer(self, loader: Any, node: yaml.Node) -> Any:
FILE: src/nominatim_db/data/country_info.py
function _flatten_name_list (line 20) | def _flatten_name_list(names: Any) -> Dict[str, str]:
class _CountryInfo (line 43) | class _CountryInfo:
method __init__ (line 47) | def __init__(self) -> None:
method load (line 50) | def load(self, config: Configuration) -> None:
method items (line 65) | def items(self) -> Iterable[Tuple[str, Dict[str, Any]]]:
method get (line 70) | def get(self, country_code: str) -> Dict[str, Any]:
function setup_country_config (line 79) | def setup_country_config(config: Configuration) -> None:
function iterate (line 88) | def iterate() -> Iterable[Tuple[str, Dict[str, Any]]]:
function iterate (line 93) | def iterate(prop: str) -> Iterable[Tuple[str, Any]]:
function iterate (line 97) | def iterate(prop: Optional[str] = None) -> Iterable[Tuple[str, Dict[str,...
function setup_country_tables (line 113) | def setup_country_tables(dsn: str, sql_dir: Path, ignore_partitions: boo...
function create_country_names (line 149) | def create_country_names(conn: Connection, tokenizer: AbstractTokenizer,
FILE: src/nominatim_db/data/place_info.py
class PlaceInfo (line 14) | class PlaceInfo:
method __init__ (line 19) | def __init__(self, info: Mapping[str, Any]) -> None:
method name (line 23) | def name(self) -> Optional[Mapping[str, str]]:
method address (line 32) | def address(self) -> Optional[Mapping[str, str]]:
method country_code (line 46) | def country_code(self) -> Optional[str]:
method rank_address (line 54) | def rank_address(self) -> int:
method centroid (line 62) | def centroid(self) -> Optional[Tuple[float, float]]:
method is_a (line 69) | def is_a(self, key: str, value: str) -> bool:
method is_country (line 75) | def is_country(self) -> bool:
FILE: src/nominatim_db/data/place_name.py
class PlaceName (line 13) | class PlaceName:
method __init__ (line 30) | def __init__(self, name: str, kind: str, suffix: Optional[str]):
method __repr__ (line 36) | def __repr__(self) -> str:
method clone (line 39) | def clone(self, name: Optional[str] = None,
method set_attr (line 59) | def set_attr(self, key: str, value: str) -> None:
method get_attr (line 65) | def get_attr(self, key: str, default: Optional[str] = None) -> Optiona...
method has_attr (line 71) | def has_attr(self, key: str) -> bool:
FILE: src/nominatim_db/data/postcode_format.py
class CountryPostcodeMatcher (line 18) | class CountryPostcodeMatcher:
method __init__ (line 22) | def __init__(self, country_code: str, config: Mapping[str, Any]) -> None:
method match (line 37) | def match(self, postcode: str) -> Optional[Match[str]]:
method normalize (line 53) | def normalize(self, match: Match[str]) -> str:
class PostcodeFormatter (line 61) | class PostcodeFormatter:
method __init__ (line 65) | def __init__(self) -> None:
method set_default_pattern (line 82) | def set_default_pattern(self, pattern: str) -> None:
method get_matcher (line 88) | def get_matcher(self, country_code: Optional[str]) -> Optional[Country...
method match (line 101) | def match(self, country_code: Optional[str], postcode: str) -> Optiona...
method normalize (line 113) | def normalize(self, country_code: str, match: Match[str]) -> str:
method get_postcode_extent (line 120) | def get_postcode_extent(self, country_code: Optional[str]) -> int:
FILE: src/nominatim_db/db/connection.py
function execute_scalar (line 27) | def execute_scalar(conn: Connection, sql: psycopg.abc.Query, args: Any =...
function table_exists (line 43) | def table_exists(conn: Connection, table: str) -> bool:
function table_has_column (line 53) | def table_has_column(conn: Connection, table: str, column: str) -> bool:
function index_exists (line 63) | def index_exists(conn: Connection, index: str, table: Optional[str] = No...
function drop_tables (line 83) | def drop_tables(conn: Connection, *names: str,
function server_version_tuple (line 100) | def server_version_tuple(conn: Connection) -> Tuple[int, int]:
function postgis_version_tuple (line 111) | def postgis_version_tuple(conn: Connection) -> Tuple[int, int]:
function register_hstore (line 125) | def register_hstore(conn: Connection) -> None:
function connect (line 134) | def connect(dsn: str, **kwargs: Any) -> Connection:
function get_pg_env (line 178) | def get_pg_env(dsn: str,
function run_async_query (line 196) | async def run_async_query(dsn: str, query: psycopg.abc.Query) -> None:
FILE: src/nominatim_db/db/properties.py
function set_property (line 15) | def set_property(conn: Connection, name: str, value: str) -> None:
function get_property (line 31) | def get_property(conn: Connection, name: str) -> Optional[str]:
FILE: src/nominatim_db/db/query_pool.py
class QueryPool (line 22) | class QueryPool:
method __init__ (line 29) | def __init__(self, dsn: str, pool_size: int = 1, **conn_args: Any) -> ...
method put_query (line 37) | async def put_query(self, query: psycopg.abc.Query, params: Any) -> None:
method finish (line 54) | async def finish(self) -> None:
method clear_queue (line 69) | def clear_queue(self) -> None:
method _worker_loop_cancellable (line 78) | async def _worker_loop_cancellable(self, dsn: str, **conn_args: Any) -...
method _worker_loop (line 88) | async def _worker_loop(self, dsn: str, **conn_args: Any) -> None:
method __aenter__ (line 108) | async def __aenter__(self) -> 'QueryPool':
method __aexit__ (line 111) | async def __aexit__(self, exc_type: Any, exc_value: Any, traceback: An...
FILE: src/nominatim_db/db/sql_preprocessor.py
function _get_partitions (line 20) | def _get_partitions(conn: Connection) -> Set[int]:
function _get_tables (line 32) | def _get_tables(conn: Connection) -> Set[str]:
function _get_middle_db_format (line 43) | def _get_middle_db_format(conn: Connection, tables: Set[str]) -> str:
function _setup_tablespace_sql (line 56) | def _setup_tablespace_sql(config: Configuration) -> Dict[str, str]:
function _setup_postgresql_features (line 71) | def _setup_postgresql_features(conn: Connection) -> Dict[str, Any]:
class SQLPreprocessor (line 78) | class SQLPreprocessor:
method __init__ (line 89) | def __init__(self, conn: Connection, config: Configuration) -> None:
method run_string (line 104) | def run_string(self, conn: Connection, template: str, **kwargs: Any) -...
method run_sql_file (line 115) | def run_sql_file(self, conn: Connection, name: str, **kwargs: Any) -> ...
method run_parallel_sql_file (line 125) | async def run_parallel_sql_file(self, dsn: str, name: str, num_threads...
FILE: src/nominatim_db/db/status.py
function compute_database_date (line 23) | def compute_database_date(conn: Connection, offline: bool = False) -> dt...
function set_status (line 67) | def set_status(conn: Connection, date: Optional[dt.datetime],
function get_status (line 87) | def get_status(conn: Connection) -> Tuple[Optional[dt.datetime], Optiona...
function set_indexed (line 101) | def set_indexed(conn: Connection, state: bool) -> None:
function log_status (line 109) | def log_status(conn: Connection, start: dt.datetime,
FILE: src/nominatim_db/db/utils.py
function _pipe_to_proc (line 22) | def _pipe_to_proc(proc: 'subprocess.Popen[bytes]',
function execute_file (line 36) | def execute_file(dsn: str, fname: Path,
FILE: src/nominatim_db/errors.py
class UsageError (line 12) | class UsageError(Exception):
FILE: src/nominatim_db/indexer/indexer.py
class Indexer (line 25) | class Indexer:
method __init__ (line 29) | def __init__(self, dsn: str, tokenizer: AbstractTokenizer, num_threads...
method has_pending (line 34) | def has_pending(self, minrank: int = 0, maxrank: int = 30) -> bool:
method index_full (line 49) | async def index_full(self, analyse: bool = True) -> None:
method index_boundaries (line 85) | async def index_boundaries(self, minrank: int = 0, maxrank: int = 30) ...
method index_by_rank (line 119) | async def index_by_rank(self, minrank: int, maxrank: int) -> int:
method index_postcodes (line 167) | async def index_postcodes(self) -> int:
method update_status_table (line 174) | def update_status_table(self) -> None:
method _index (line 183) | async def _index(self, runner: runners.Runner, batch: int = 1,
method _prepare_indexing (line 233) | def _prepare_indexing(self, runner: runners.Runner) -> int:
FILE: src/nominatim_db/indexer/progress.py
class ProgressLogger (line 18) | class ProgressLogger:
method __init__ (line 26) | def __init__(self, name: str, total: int, log_interval: int = 1) -> None:
method add (line 34) | def add(self, num: int = 1) -> None:
method done (line 59) | def done(self) -> int:
FILE: src/nominatim_db/indexer/runners.py
function _mk_valuelist (line 23) | def _mk_valuelist(template: str, num: int) -> pysql.Composed:
function _analyze_place (line 27) | def _analyze_place(place: DictRow, analyzer: AbstractAnalyzer) -> Json:
class Runner (line 31) | class Runner(Protocol):
method name (line 32) | def name(self) -> str: ...
method sql_count_objects (line 33) | def sql_count_objects(self) -> Query: ...
method sql_get_objects (line 34) | def sql_get_objects(self) -> Query: ...
method index_places_query (line 35) | def index_places_query(self, batch_size: int) -> Query: ...
method index_places_params (line 36) | def index_places_params(self, place: DictRow) -> Sequence[Any]: ...
class AbstractPlacexRunner (line 45) | class AbstractPlacexRunner:
method __init__ (line 49) | def __init__(self, rank: int, analyzer: AbstractAnalyzer) -> None:
method index_places_query (line 53) | def index_places_query(self, batch_size: int) -> Query:
method index_places_params (line 62) | def index_places_params(self, place: DictRow) -> Sequence[Any]:
class RankRunner (line 70) | class RankRunner(AbstractPlacexRunner):
method name (line 74) | def name(self) -> str:
method sql_count_objects (line 77) | def sql_count_objects(self) -> pysql.Composed:
method sql_get_objects (line 82) | def sql_get_objects(self) -> pysql.Composed:
class BoundaryRunner (line 89) | class BoundaryRunner(AbstractPlacexRunner):
method name (line 94) | def name(self) -> str:
method sql_count_objects (line 97) | def sql_count_objects(self) -> Query:
method sql_get_objects (line 104) | def sql_get_objects(self) -> Query:
class InterpolationRunner (line 112) | class InterpolationRunner:
method __init__ (line 117) | def __init__(self, analyzer: AbstractAnalyzer) -> None:
method name (line 120) | def name(self) -> str:
method sql_count_objects (line 123) | def sql_count_objects(self) -> Query:
method sql_get_objects (line 127) | def sql_get_objects(self) -> Query:
method index_places_query (line 133) | def index_places_query(self, batch_size: int) -> Query:
method index_places_params (line 140) | def index_places_params(self, place: DictRow) -> Sequence[Any]:
class PostcodeRunner (line 145) | class PostcodeRunner(Runner):
method name (line 149) | def name(self) -> str:
method sql_count_objects (line 152) | def sql_count_objects(self) -> Query:
method sql_get_objects (line 155) | def sql_get_objects(self) -> Query:
method index_places_query (line 160) | def index_places_query(self, batch_size: int) -> Query:
method index_places_params (line 165) | def index_places_params(self, place: DictRow) -> Sequence[Any]:
FILE: src/nominatim_db/tokenizer/base.py
class AbstractAnalyzer (line 20) | class AbstractAnalyzer(ABC):
method __enter__ (line 28) | def __enter__(self) -> 'AbstractAnalyzer':
method __exit__ (line 31) | def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> N...
method close (line 35) | def close(self) -> None:
method get_word_token_info (line 40) | def get_word_token_info(self, words: List[str]) -> List[Tuple[str, str...
method normalize_postcode (line 58) | def normalize_postcode(self, postcode: str) -> str:
method update_postcodes_from_db (line 72) | def update_postcodes_from_db(self) -> None:
method update_special_phrases (line 78) | def update_special_phrases(self,
method add_country_names (line 93) | def add_country_names(self, country_code: str, names: Dict[str, str]) ...
method process_place (line 103) | def process_place(self, place: PlaceInfo) -> Any:
class AbstractTokenizer (line 117) | class AbstractTokenizer(ABC):
method init_new_db (line 124) | def init_new_db(self, config: Configuration, init_db: bool = True) -> ...
method init_from_project (line 141) | def init_from_project(self, config: Configuration) -> None:
method finalize_import (line 152) | def finalize_import(self, config: Configuration) -> None:
method update_sql_functions (line 163) | def update_sql_functions(self, config: Configuration) -> None:
method check_database (line 176) | def check_database(self, config: Configuration) -> Optional[str]:
method update_statistics (line 190) | def update_statistics(self, config: Configuration, threads: int = 1) -...
method update_word_tokens (line 198) | def update_word_tokens(self) -> None:
method name_analyzer (line 204) | def name_analyzer(self) -> AbstractAnalyzer:
method most_frequent_words (line 219) | def most_frequent_words(self, conn: Connection, num: int) -> List[str]:
class TokenizerModule (line 229) | class TokenizerModule(Protocol):
method create (line 234) | def create(self, dsn: str) -> AbstractTokenizer:
FILE: src/nominatim_db/tokenizer/factory.py
function _import_tokenizer (line 33) | def _import_tokenizer(name: str) -> TokenizerModule:
function create_tokenizer (line 45) | def create_tokenizer(config: Configuration, init_db: bool = True,
function get_tokenizer_for_db (line 67) | def get_tokenizer_for_db(config: Configuration) -> AbstractTokenizer:
FILE: src/nominatim_db/tokenizer/icu_rule_loader.py
function _get_section (line 33) | def _get_section(rules: Mapping[str, Any], section: str) -> Any:
class ICURuleLoader (line 44) | class ICURuleLoader:
method __init__ (line 48) | def __init__(self, config: Configuration) -> None:
method load_config_from_db (line 64) | def load_config_from_db(self, conn: Connection) -> None:
method save_config_to_db (line 83) | def save_config_to_db(self, conn: Connection) -> None:
method make_sanitizer (line 91) | def make_sanitizer(self) -> PlaceSanitizer:
method make_token_analysis (line 96) | def make_token_analysis(self) -> ICUTokenAnalysis:
method get_search_rules (line 102) | def get_search_rules(self) -> str:
method get_normalization_rules (line 114) | def get_normalization_rules(self) -> str:
method get_transliteration_rules (line 119) | def get_transliteration_rules(self) -> str:
method _setup_analysis (line 124) | def _setup_analysis(self) -> None:
method _cfg_to_icu_rules (line 150) | def _cfg_to_icu_rules(rules: Mapping[str, Any], section: str) -> str:
class TokenAnalyzerRule (line 165) | class TokenAnalyzerRule:
method __init__ (line 170) | def __init__(self, rules: Mapping[str, Any],
method create (line 183) | def create(self, normalizer: Any, transliterator: Any) -> Analyzer:
FILE: src/nominatim_db/tokenizer/icu_token_analysis.py
class ICUTokenAnalysis (line 21) | class ICUTokenAnalysis:
method __init__ (line 26) | def __init__(self, norm_rules: str, trans_rules: str,
method get_analyzer (line 41) | def get_analyzer(self, name: Optional[str]) -> Analyzer:
FILE: src/nominatim_db/tokenizer/icu_tokenizer.py
function create (line 40) | def create(dsn: str) -> 'ICUTokenizer':
class ICUTokenizer (line 46) | class ICUTokenizer(AbstractTokenizer):
method __init__ (line 52) | def __init__(self, dsn: str) -> None:
method init_new_db (line 56) | def init_new_db(self, config: Configuration, init_db: bool = True) -> ...
method init_from_project (line 71) | def init_from_project(self, config: Configuration) -> None:
method finalize_import (line 79) | def finalize_import(self, config: Configuration) -> None:
method update_sql_functions (line 85) | def update_sql_functions(self, config: Configuration) -> None:
method check_database (line 92) | def check_database(self, config: Configuration) -> None:
method update_statistics (line 98) | def update_statistics(self, config: Configuration, threads: int = 2) -...
method _cleanup_housenumbers (line 155) | def _cleanup_housenumbers(self) -> None:
method update_word_tokens (line 188) | def update_word_tokens(self) -> None:
method name_analyzer (line 195) | def name_analyzer(self) -> 'ICUNameAnalyzer':
method most_frequent_words (line 214) | def most_frequent_words(self, conn: Connection, num: int) -> List[str]:
method _save_config (line 225) | def _save_config(self) -> None:
method _setup_db_tables (line 233) | def _setup_db_tables(self, config: Configuration) -> None:
method _create_base_indices (line 256) | def _create_base_indices(self, config: Configuration, table_name: str)...
method _create_lookup_indices (line 276) | def _create_lookup_indices(self, config: Configuration, table_name: st...
method _move_temporary_word_table (line 291) | def _move_temporary_word_table(self, old: str) -> None:
class ICUNameAnalyzer (line 306) | class ICUNameAnalyzer(AbstractAnalyzer):
method __init__ (line 313) | def __init__(self, dsn: str, sanitizer: PlaceSanitizer,
method close (line 322) | def close(self) -> None:
method _search_normalized (line 329) | def _search_normalized(self, name: str) -> str:
method _normalized (line 334) | def _normalized(self, name: str) -> str:
method get_word_token_info (line 340) | def get_word_token_info(self, words: Sequence[str]) -> List[Tuple[str,...
method normalize_postcode (line 373) | def normalize_postcode(self, postcode: str) -> str:
method update_postcodes_from_db (line 381) | def update_postcodes_from_db(self) -> None:
method update_special_phrases (line 392) | def update_special_phrases(self, phrases: Iterable[Tuple[str, str, str...
method _add_special_phrases (line 421) | def _add_special_phrases(self, cursor: Cursor,
method _remove_special_phrases (line 440) | def _remove_special_phrases(self, cursor: Cursor,
method add_country_names (line 458) | def add_country_names(self, country_code: str, names: Mapping[str, str...
method _add_country_full_names (line 469) | def _add_country_full_names(self, country_code: str, names: Sequence[P...
method process_place (line 525) | def process_place(self, place: PlaceInfo) -> Mapping[str, Any]:
method _process_place_address (line 547) | def _process_place_address(self, token_info: '_TokenInfo',
method _compute_housenumber_token (line 564) | def _compute_housenumber_token(self, hnr: PlaceName) -> Tuple[Optional...
method _retrieve_full_tokens (line 603) | def _retrieve_full_tokens(self, name: str) -> List[int]:
method _compute_name_tokens (line 623) | def _compute_name_tokens(self, names: Sequence[PlaceName]) -> Tuple[Se...
method _add_postcode (line 664) | def _add_postcode(self, item: PlaceName) -> Optional[str]:
class _TokenInfo (line 676) | class _TokenInfo:
method __init__ (line 679) | def __init__(self) -> None:
method _mk_array (line 688) | def _mk_array(self, tokens: Iterable[Any]) -> str:
method to_dict (line 691) | def to_dict(self) -> Dict[str, Any]:
method set_names (line 717) | def set_names(self, fulls: Iterable[int], partials: Iterable[int]) -> ...
method add_housenumber (line 722) | def add_housenumber(self, token: Optional[int], hnr: Optional[str]) ->...
method add_street (line 731) | def add_street(self, tokens: Iterable[int]) -> None:
method add_place (line 738) | def add_place(self, tokens: Iterable[int]) -> None:
method add_address_term (line 743) | def add_address_term(self, key: str, partials: Iterable[int]) -> None:
method set_postcode (line 750) | def set_postcode(self, postcode: Optional[str]) -> None:
class _TokenCache (line 756) | class _TokenCache:
method __init__ (line 762) | def __init__(self) -> None:
FILE: src/nominatim_db/tokenizer/place_sanitizer.py
class PlaceSanitizer (line 21) | class PlaceSanitizer:
method __init__ (line 26) | def __init__(self, rules: Optional[Sequence[Mapping[str, Any]]],
method process_names (line 42) | def process_names(self, place: PlaceInfo) -> Tuple[List[PlaceName], Li...
FILE: src/nominatim_db/tokenizer/sanitizers/base.py
class ProcessInfo (line 18) | class ProcessInfo:
method __init__ (line 25) | def __init__(self, place: PlaceInfo):
method _convert_name_dict (line 31) | def _convert_name_dict(names: Optional[Mapping[str, str]]) -> List[Pla...
class SanitizerHandler (line 48) | class SanitizerHandler(Protocol):
method create (line 52) | def create(self, config: SanitizerConfig) -> Callable[[ProcessInfo], N...
FILE: src/nominatim_db/tokenizer/sanitizers/clean_housenumbers.py
class _HousenumberSanitizer (line 41) | class _HousenumberSanitizer:
method __init__ (line 43) | def __init__(self, config: SanitizerConfig) -> None:
method __call__ (line 50) | def __call__(self, obj: ProcessInfo) -> None:
method sanitize (line 86) | def sanitize(self, value: str) -> Iterator[str]:
method _regularize (line 96) | def _regularize(self, hnr: str) -> Iterator[str]:
method _expand_range (line 99) | def _expand_range(self, itype: Union[str, int], hnr: str) -> Iterable[...
function create (line 116) | def create(config: SanitizerConfig) -> Callable[[ProcessInfo], None]:
FILE: src/nominatim_db/tokenizer/sanitizers/clean_postcodes.py
class _PostcodeSanitizer (line 30) | class _PostcodeSanitizer:
method __init__ (line 32) | def __init__(self, config: SanitizerConfig) -> None:
method __call__ (line 40) | def __call__(self, obj: ProcessInfo) -> None:
method scan (line 58) | def scan(self, postcode: str, country: Optional[str]) -> Optional[Tupl...
function create (line 73) | def create(config: SanitizerConfig) -> Callable[[ProcessInfo], None]:
FILE: src/nominatim_db/tokenizer/sanitizers/clean_tiger_tags.py
function _clean_tiger_county (line 23) | def _clean_tiger_county(obj: ProcessInfo) -> None:
function create (line 44) | def create(_: SanitizerConfig) -> Callable[[ProcessInfo], None]:
FILE: src/nominatim_db/tokenizer/sanitizers/config.py
class SanitizerConfig (line 24) | class SanitizerConfig(_BaseUserDict):
method get_string_list (line 32) | def get_string_list(self, param: str, default: Sequence[str] = tuple()...
method get_bool (line 65) | def get_bool(self, param: str, default: Optional[bool] = None) -> bool:
method get_delimiter (line 85) | def get_delimiter(self, default: str = ',;') -> Pattern[str]:
method get_filter (line 107) | def get_filter(self, param: str, default: Union[str, Sequence[str]] = ...
FILE: src/nominatim_db/tokenizer/sanitizers/delete_tags.py
class _TagSanitizer (line 64) | class _TagSanitizer:
method __init__ (line 66) | def __init__(self, config: SanitizerConfig) -> None:
method __call__ (line 78) | def __call__(self, obj: ProcessInfo) -> None:
method _set_allowed_ranks (line 101) | def _set_allowed_ranks(self, ranks: Sequence[str]) -> Tuple[bool, ...]:
function create (line 121) | def create(config: SanitizerConfig) -> Callable[[ProcessInfo], None]:
FILE: src/nominatim_db/tokenizer/sanitizers/split_name_list.py
function create (line 20) | def create(config: SanitizerConfig) -> Callable[[ProcessInfo], None]:
FILE: src/nominatim_db/tokenizer/sanitizers/strip_brace_terms.py
function create (line 18) | def create(_: SanitizerConfig) -> Callable[[ProcessInfo], None]:
FILE: src/nominatim_db/tokenizer/sanitizers/tag_analyzer_by_language.py
class _AnalyzerByLanguage (line 40) | class _AnalyzerByLanguage:
method __init__ (line 44) | def __init__(self, config: SanitizerConfig) -> None:
method _compute_default_languages (line 51) | def _compute_default_languages(self, use_defaults: str) -> None:
method _suffix_matches (line 62) | def _suffix_matches(self, suffix: str) -> bool:
method __call__ (line 68) | def __call__(self, obj: ProcessInfo) -> None:
function create (line 92) | def create(config: SanitizerConfig) -> Callable[[ProcessInfo], None]:
FILE: src/nominatim_db/tokenizer/sanitizers/tag_japanese.py
function create (line 22) | def create(_: SanitizerConfig) -> Callable[[ProcessInfo], None]:
function reconbine_housenumber (line 28) | def reconbine_housenumber(
function reconbine_place (line 62) | def reconbine_place(
function tag_japanese (line 96) | def tag_japanese(obj: ProcessInfo) -> None:
FILE: src/nominatim_db/tokenizer/token_analysis/base.py
class Analyzer (line 16) | class Analyzer(Protocol):
method get_canonical_id (line 21) | def get_canonical_id(self, name: PlaceName) -> str:
method compute_variants (line 36) | def compute_variants(self, canonical_id: str) -> Union[List[str], Tupl...
class AnalysisModule (line 56) | class AnalysisModule(Protocol):
method configure (line 62) | def configure(self, rules: Mapping[str, Any],
method create (line 82) | def create(self, normalizer: Any, transliterator: Any, config: Any) ->...
FILE: src/nominatim_db/tokenizer/token_analysis/config_variants.py
class ICUVariant (line 19) | class ICUVariant(NamedTuple):
function get_variant_config (line 26) | def get_variant_config(in_rules: Any,
class _VariantMaker (line 59) | class _VariantMaker:
method __init__ (line 65) | def __init__(self, normalizer: Any) -> None:
method compute (line 68) | def compute(self, rule: Any) -> Iterator[ICUVariant]:
method _parse_variant_word (line 91) | def _parse_variant_word(self, name: str) -> Optional[Tuple[str, str, s...
function _create_variants (line 108) | def _create_variants(src: str, preflag: str, postflag: str,
FILE: src/nominatim_db/tokenizer/token_analysis/generic.py
function configure (line 22) | def configure(rules: Mapping[str, Any], normalizer: Any, _: Any) -> Dict...
function create (line 51) | def create(normalizer: Any, transliterator: Any,
class GenericTokenAnalysis (line 58) | class GenericTokenAnalysis:
method __init__ (line 63) | def __init__(self, norm: Any, to_ascii: Any, config: Mapping[str, Any]...
method get_canonical_id (line 75) | def get_canonical_id(self, name: PlaceName) -> str:
method compute_variants (line 81) | def compute_variants(self, norm_name: str) -> Tuple[List[str], List[st...
method _generate_word_variants (line 105) | def _generate_word_variants(self, norm_name: str) -> Iterable[str]:
FILE: src/nominatim_db/tokenizer/token_analysis/generic_mutation.py
function _zigzag (line 20) | def _zigzag(outer: Iterable[str], inner: Iterable[str]) -> Iterator[str]:
class MutationVariantGenerator (line 24) | class MutationVariantGenerator:
method __init__ (line 31) | def __init__(self, pattern: str, replacements: Sequence[str]):
method generate (line 40) | def generate(self, names: Iterable[str]) -> Iterator[str]:
method _fillers (line 52) | def _fillers(self, num_parts: int) -> Iterator[Tuple[str, ...]]:
FILE: src/nominatim_db/tokenizer/token_analysis/housenumbers.py
function configure (line 25) | def configure(*_: Any) -> None:
function create (line 33) | def create(normalizer: Any, transliterator: Any, config: None) -> 'House...
class HousenumberTokenAnalysis (line 39) | class HousenumberTokenAnalysis:
method __init__ (line 42) | def __init__(self, norm: Any, trans: Any) -> None:
method get_canonical_id (line 48) | def get_canonical_id(self, name: PlaceName) -> str:
method compute_variants (line 67) | def compute_variants(self, norm_name: str) -> List[str]:
FILE: src/nominatim_db/tokenizer/token_analysis/postcodes.py
function configure (line 19) | def configure(*_: Any) -> None:
function create (line 27) | def create(normalizer: Any, transliterator: Any, config: None) -> 'Postc...
class PostcodeTokenAnalysis (line 33) | class PostcodeTokenAnalysis:
method __init__ (line 43) | def __init__(self, norm: Any, trans: Any) -> None:
method get_canonical_id (line 49) | def get_canonical_id(self, name: PlaceName) -> str:
method compute_variants (line 54) | def compute_variants(self, norm_name: str) -> List[str]:
FILE: src/nominatim_db/tokenizer/token_analysis/simple_trie.py
class SimpleTrie (line 16) | class SimpleTrie(Generic[T]):
method __init__ (line 22) | def __init__(self, data: Optional[List[Tuple[str, T]]] = None) -> None:
method _add (line 33) | def _add(self, word: str, pos: int, value: T) -> None:
method _make_compact (line 43) | def _make_compact(self) -> None:
method longest_prefix (line 59) | def longest_prefix(self, word: str, start: int = 0) -> Tuple[Optional[...
FILE: src/nominatim_db/tools/add_osm_data.py
function _run_osm2pgsql (line 22) | def _run_osm2pgsql(dsn: str, options: MutableMapping[str, Any]) -> None:
function add_data_from_file (line 32) | def add_data_from_file(dsn: str, fname: str, options: MutableMapping[str...
function add_osm_object (line 44) | def add_osm_object(dsn: str, osm_type: str, osm_id: int, use_main_api: b...
FILE: src/nominatim_db/tools/admin.py
function _get_place_info (line 27) | def _get_place_info(cursor: Cursor, osm_id: Optional[str],
function analyse_indexing (line 58) | def analyse_indexing(config: Configuration, osm_id: Optional[str] = None,
function clean_deleted_relations (line 95) | def clean_deleted_relations(config: Configuration, age: str) -> None:
function grant_ro_access (line 111) | def grant_ro_access(dsn: str, config: Configuration) -> None:
FILE: src/nominatim_db/tools/check_database.py
class CheckState (line 26) | class CheckState(Enum):
function _check (line 40) | def _check(hint: Optional[str] = None) -> Callable[[CheckFunc], CheckFunc]:
class _BadConnection (line 75) | class _BadConnection:
method __init__ (line 77) | def __init__(self, msg: str) -> None:
method close (line 80) | def close(self) -> None:
function check_database (line 85) | def check_database(config: Configuration) -> int:
function _get_indexes (line 106) | def _get_indexes(conn: Connection) -> List[str]:
function check_connection (line 153) | def check_connection(conn: Any, config: Configuration) -> CheckResult:
function check_database_version (line 171) | def check_database_version(conn: Connection, config: Configuration) -> C...
function check_placex_table (line 211) | def check_placex_table(conn: Connection, config: Configuration) -> Check...
function check_placex_size (line 221) | def check_placex_size(conn: Connection, _: Configuration) -> CheckResult:
function check_tokenizer (line 230) | def check_tokenizer(_: Connection, config: Configuration) -> CheckResult:
function check_existance_wikipedia (line 252) | def check_existance_wikipedia(conn: Connection, _: Configuration) -> Che...
function check_indexing (line 271) | def check_indexing(conn: Connection, _: Configuration) -> CheckResult:
function check_database_indexes (line 301) | def check_database_indexes(conn: Connection, _: Configuration) -> CheckR...
function check_database_index_valid (line 323) | def check_database_index_valid(conn: Connection, _: Configuration) -> Ch...
function check_tiger_table (line 343) | def check_tiger_table(conn: Connection, config: Configuration) -> CheckR...
FILE: src/nominatim_db/tools/collect_os_info.py
function friendly_memory_string (line 24) | def friendly_memory_string(mem: float) -> str:
function run_command (line 36) | def run_command(cmd: Union[str, List[str]]) -> str:
function os_name_info (line 49) | def os_name_info() -> str:
function from_file_find_line_portion (line 71) | def from_file_find_line_portion(
function get_postgresql_config (line 84) | def get_postgresql_config(version: int) -> str:
function report_system_information (line 95) | def report_system_information(config: Configuration) -> None:
FILE: src/nominatim_db/tools/convert_sqlite.py
function convert (line 25) | async def convert(project_dir: Optional[Union[str, Path]],
class SqliteWriter (line 47) | class SqliteWriter:
method __init__ (line 51) | def __init__(self, src: napi.SearchConnection,
method write (line 57) | async def write(self) -> None:
method create_tables (line 70) | async def create_tables(self) -> None:
method create_class_tables (line 89) | async def create_class_tables(self) -> None:
method create_word_table (line 100) | async def create_word_table(self) -> None:
method copy_data (line 122) | async def copy_data(self) -> None:
method create_indexes (line 150) | async def create_indexes(self) -> None:
method create_spatial_index (line 195) | async def create_spatial_index(self, table: str, column: str) -> None:
method create_index (line 201) | async def create_index(self, table_name: str, column: str) -> None:
method create_search_index (line 208) | async def create_search_index(self) -> None:
method select_from (line 237) | def select_from(self, table: str) -> SaSelect:
FILE: src/nominatim_db/tools/database_import.py
function _require_version (line 33) | def _require_version(module: str, actual: Tuple[int, int], expected: Tup...
function _require_loaded (line 44) | def _require_loaded(extension_name: str, conn: Connection) -> None:
function check_existing_database_plugins (line 53) | def check_existing_database_plugins(dsn: str) -> None:
function setup_database_skeleton (line 65) | def setup_database_skeleton(dsn: str, rouser: Optional[str] = None) -> N...
function import_osm_data (line 110) | def import_osm_data(osm_files: Union[Path, Sequence[Path]],
function create_tables (line 150) | def create_tables(conn: Connection, config: Configuration, reverse_only:...
function create_table_triggers (line 162) | def create_table_triggers(conn: Connection, config: Configuration) -> None:
function create_partition_tables (line 170) | def create_partition_tables(conn: Connection, config: Configuration) -> ...
function truncate_data_tables (line 177) | def truncate_data_tables(conn: Connection) -> None:
function load_data (line 208) | async def load_data(dsn: str, threads: int) -> None:
function _progress_print (line 239) | async def _progress_print() -> None:
function create_search_indices (line 249) | async def create_search_indices(conn: Connection, config: Configuration,
FILE: src/nominatim_db/tools/exec_utils.py
function run_osm2pgsql (line 24) | def run_osm2pgsql(options: Mapping[str, Any]) -> None:
function _mk_tablespace_options (line 73) | def _mk_tablespace_options(ttype: str, options: Mapping[str, Any]) -> Li...
function _find_osm2pgsql_cmd (line 83) | def _find_osm2pgsql_cmd(cmdline: Optional[str]) -> str:
function _check_osm2pgsql_version (line 94) | def _check_osm2pgsql_version(cmdline: Optional[str]) -> None:
FILE: src/nominatim_db/tools/freeze.py
function drop_update_tables (line 34) | def drop_update_tables(conn: Connection) -> None:
function drop_flatnode_file (line 49) | def drop_flatnode_file(fpath: Optional[Path]) -> None:
function is_frozen (line 56) | def is_frozen(conn: Connection) -> bool:
FILE: src/nominatim_db/tools/migration.py
function migrate (line 30) | def migrate(config: Configuration, paths: Any) -> int:
function _migration (line 79) | def _migration(major: int, minor: int, patch: int = 0,
function create_postcode_area_lookup_index (line 102) | def create_postcode_area_lookup_index(conn: Connection, **_: Any) -> None:
function create_postcode_parent_index (line 113) | def create_postcode_parent_index(conn: Connection, **_: Any) -> None:
function create_placex_entrance_table (line 124) | def create_placex_entrance_table(conn: Connection, config: Configuration...
function create_place_entrance_table (line 145) | def create_place_entrance_table(conn: Connection, config: Configuration,...
function convert_country_tokens (line 164) | def convert_country_tokens(conn: Connection, config: Configuration, **_:...
function create_place_postcode_table (line 186) | def create_place_postcode_table(conn: Connection, config: Configuration,...
function create_place_interpolation_table (line 356) | def create_place_interpolation_table(conn: Connection, config: Configura...
function backfill_importance (line 426) | def backfill_importance(conn: Connection, **_: Any) -> None:
function create_place_associated_street_table (line 443) | def create_place_associated_street_table(conn: Connection, **_: Any) -> ...
function create_associated_street_triggers (line 502) | def create_associated_street_triggers(conn: Connection, config: Configur...
FILE: src/nominatim_db/tools/postcodes.py
function _to_float (line 29) | def _to_float(numstr: str, max_value: float) -> float:
function _extent_to_rank (line 41) | def _extent_to_rank(extent: int) -> int:
class _PostcodeCollector (line 51) | class _PostcodeCollector:
method __init__ (line 55) | def __init__(self, country: str, matcher: Optional[CountryPostcodeMatc...
method add (line 64) | def add(self, postcode: str, x: float, y: float) -> None:
method commit (line 80) | def commit(self, conn: Connection, analyzer: AbstractAnalyzer,
method _update_from_external (line 135) | def _update_from_external(self, analyzer: AbstractAnalyzer, project_di...
method _open_external (line 164) | def _open_external(self, project_dir: Path) -> Optional[TextIO]:
function update_postcodes (line 180) | def update_postcodes(dsn: str, project_dir: Optional[Path],
function _is_postcode_table_empty (line 213) | def _is_postcode_table_empty(conn: Connection) -> bool:
function _insert_postcode_areas (line 221) | def _insert_postcode_areas(conn: Connection, country_code: str,
function _update_postcode_areas (line 250) | def _update_postcode_areas(conn: Connection, analyzer: AbstractAnalyzer,
function _update_guessed_postcode (line 294) | def _update_guessed_postcode(conn: Connection, analyzer: AbstractAnalyzer,
function can_compute (line 371) | def can_compute(dsn: str) -> bool:
FILE: src/nominatim_db/tools/refresh.py
function _add_address_level_rows_from_entry (line 28) | def _add_address_level_rows_from_entry(rows: MutableSequence[Tuple[Any, ...
function load_address_levels (line 47) | def load_address_levels(conn: Connection, table: str, levels: Sequence[M...
function load_address_levels_from_config (line 78) | def load_address_levels_from_config(conn: Connection, config: Configurat...
function create_functions (line 88) | def create_functions(conn: Connection, config: Configuration,
function import_wikipedia_articles (line 100) | def import_wikipedia_articles(dsn: str, data_path: Path, ignore_errors: ...
function import_importance_csv (line 116) | def import_importance_csv(dsn: str, data_file: Path) -> int:
function import_importance_sql (line 166) | def import_importance_sql(dsn: str, data_file: Path, ignore_errors: bool...
function import_secondary_importance (line 184) | def import_secondary_importance(dsn: str, data_path: Path, ignore_errors...
function recompute_importance (line 199) | def recompute_importance(conn: Connection) -> None:
function invalidate_osm_object (line 227) | def invalidate_osm_object(osm_type: str, osm_id: int, conn: Connection,
FILE: src/nominatim_db/tools/replication.py
function init_replication (line 37) | def init_replication(conn: Connection, base_url: str,
function check_for_updates (line 61) | def check_for_updates(conn: Connection, base_url: str,
class UpdateState (line 88) | class UpdateState(Enum):
function update (line 97) | def update(dsn: str, options: MutableMapping[str, Any],
function run_osm2pgsql_updates (line 149) | def run_osm2pgsql_updates(conn: Connection, options: MutableMapping[str,...
function _make_replication_server (line 168) | def _make_replication_server(url: str, timeout: int) -> ContextManager[R...
FILE: src/nominatim_db/tools/special_phrases/importer_statistics.py
class SpecialPhrasesImporterStatistics (line 15) | class SpecialPhrasesImporterStatistics():
method __init__ (line 20) | def __init__(self) -> None:
method _intialize_values (line 23) | def _intialize_values(self) -> None:
method notify_one_phrase_invalid (line 33) | def notify_one_phrase_invalid(self) -> None:
method notify_one_table_created (line 40) | def notify_one_table_created(self) -> None:
method notify_one_table_deleted (line 46) | def notify_one_table_deleted(self) -> None:
method notify_one_table_ignored (line 52) | def notify_one_table_ignored(self) -> None:
method notify_import_done (line 58) | def notify_import_done(self) -> None:
FILE: src/nominatim_db/tools/special_phrases/sp_csv_loader.py
class SPCsvLoader (line 20) | class SPCsvLoader:
method __init__ (line 24) | def __init__(self, csv_path: str) -> None:
method generate_phrases (line 27) | def generate_phrases(self) -> Iterable[SpecialPhrase]:
method _check_csv_validity (line 38) | def _check_csv_validity(self) -> None:
FILE: src/nominatim_db/tools/special_phrases/sp_importer.py
function _classtype_table (line 31) | def _classtype_table(phrase_class: str, phrase_type: str) -> str:
class SpecialPhraseLoader (line 37) | class SpecialPhraseLoader(Protocol):
method generate_phrases (line 41) | def generate_phrases(self) -> Iterable[SpecialPhrase]:
class SPImporter (line 46) | class SPImporter():
method __init__ (line 52) | def __init__(self, config: Configuration, conn: Connection,
method get_classtype_pairs (line 67) | def get_classtype_pairs(self, min: int = 0) -> Set[Tuple[str, str]]:
method import_phrases (line 91) | def import_phrases(self, tokenizer: AbstractTokenizer, should_replace:...
method _fetch_existing_place_classtype_tables (line 124) | def _fetch_existing_place_classtype_tables(self) -> None:
method _load_white_and_black_lists (line 140) | def _load_white_and_black_lists(self) \
method _check_sanity (line 149) | def _check_sanity(self, phrase: SpecialPhrase) -> bool:
method _process_phrase (line 163) | def _process_phrase(self, phrase: SpecialPhrase) -> Optional[Tuple[str...
method _create_classtype_table_and_indexes (line 190) | def _create_classtype_table_and_indexes(self,
method _create_place_classtype_table (line 243) | def _create_place_classtype_table(self, sql_tablespace: str,
method _create_place_classtype_indexes (line 259) | def _create_place_classtype_indexes(self, sql_tablespace: str,
method _grant_access_to_webuser (line 282) | def _grant_access_to_webuser(self, phrase_class: str, phrase_type: str...
method _remove_non_existent_tables_from_db (line 292) | def _remove_non_existent_tables_from_db(self) -> None:
FILE: src/nominatim_db/tools/special_phrases/sp_wiki_loader.py
function _get_wiki_content (line 23) | def _get_wiki_content(lang: str) -> str:
class SPWikiLoader (line 35) | class SPWikiLoader:
method __init__ (line 39) | def __init__(self, config: Configuration) -> None:
method generate_phrases (line 51) | def generate_phrases(self) -> Iterable[SpecialPhrase]:
FILE: src/nominatim_db/tools/special_phrases/special_phrase.py
class SpecialPhrase (line 16) | class SpecialPhrase:
method __init__ (line 20) | def __init__(self, p_label: str, p_class: str, p_type: str, p_operator...
method __eq__ (line 28) | def __eq__(self, other: Any) -> bool:
method __hash__ (line 37) | def __hash__(self) -> int:
FILE: src/nominatim_db/tools/tiger_data.py
class TigerInput (line 30) | class TigerInput:
method __init__ (line 35) | def __init__(self, data_dir: str) -> None:
method __enter__ (line 56) | def __enter__(self) -> 'TigerInput':
method __exit__ (line 59) | def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None:
method __bool__ (line 64) | def __bool__(self) -> bool:
method get_file (line 67) | def get_file(self, fname: Union[str, tarfile.TarInfo]) -> TextIO:
method __iter__ (line 78) | def __iter__(self) -> Iterator[Dict[str, Any]]:
function add_tiger_data (line 86) | async def add_tiger_data(data_dir: str, config: Configuration, threads: ...
FILE: src/nominatim_db/typing.py
class DictCursorResult (line 27) | class DictCursorResult(Mapping[str, Any]):
method __getitem__ (line 28) | def __getitem__(self, x: Union[int, str]) -> Any: ...
FILE: src/nominatim_db/utils/centroid.py
class PointsCentroid (line 14) | class PointsCentroid:
method __init__ (line 22) | def __init__(self) -> None:
method centroid (line 27) | def centroid(self) -> Tuple[float, float]:
method __len__ (line 36) | def __len__(self) -> int:
method __iadd__ (line 39) | def __iadd__(self, other: Any) -> 'PointsCentroid':
FILE: src/nominatim_db/utils/url_utils.py
function get_url (line 19) | def get_url(url: str) -> str:
FILE: src/nominatim_db/version.py
class NominatimVersion (line 13) | class NominatimVersion(NamedTuple):
method __str__ (line 34) | def __str__(self) -> str:
method release_version (line 40) | def release_version(self) -> str:
function parse_version (line 48) | def parse_version(version: str) -> NominatimVersion:
FILE: test/bdd/conftest.py
function _strlist (line 40) | def _strlist(inp):
function _pretty_json (line 44) | def _pretty_json(inp):
function pytest_addoption (line 48) | def pytest_addoption(parser, pluginmanager):
function datatable (line 70) | def datatable():
function node_grid (line 77) | def node_grid():
function setup_country_info (line 84) | def setup_country_info():
function template_db (line 89) | def template_db(pytestconfig):
function def_config (line 110) | def def_config(pytestconfig):
function db (line 118) | def db(template_db, pytestconfig):
function db_conn (line 134) | def db_conn(db, def_config):
function reverse_geocode_via_api (line 143) | def reverse_geocode_via_api(test_config_env, pytestconfig, datatable, la...
function reverse_geocode_via_api_and_grid (line 164) | def reverse_geocode_via_api_and_grid(test_config_env, pytestconfig, node...
function forward_geocode_via_api (line 174) | def forward_geocode_via_api(test_config_env, pytestconfig, datatable, qu...
function check_number_of_results (line 199) | def check_number_of_results(nominatim_result, op, num):
function check_metadata_for_fields (line 205) | def check_metadata_for_fields(nominatim_result, datatable):
function check_metadata_for_field_presence (line 217) | def check_metadata_for_field_presence(nominatim_result, attributes):
function check_result_for_fields (line 224) | def check_result_for_fields(nominatim_result, datatable, node_grid, field):
function check_result_for_field_presence (line 240) | def check_result_for_field_presence(nominatim_result, attributes):
function check_result_for_field_absence (line 247) | def check_result_for_field_absence(nominatim_result, attributes):
function check_result_array_field_for_attributes (line 255) | def check_result_array_field_for_attributes(nominatim_result, datatable,...
function check_result_list_match (line 270) | def check_result_list_match(nominatim_result, datatable, exact):
function check_all_results_for_field_presence (line 293) | def check_all_results_for_field_presence(nominatim_result, attributes):
function check_all_result_for_field_absence (line 303) | def check_all_result_for_field_absence(nominatim_result, attributes):
function check_all_results_contain (line 312) | def check_all_results_contain(nominatim_result, datatable, node_grid, fi...
function check_specific_result_for_fields (line 330) | def check_specific_result_for_fields(nominatim_result, datatable, num, f...
function set_node_grid (line 347) | def set_node_grid(datatable, step, origin):
function check_place_missing_lines (line 368) | def check_place_missing_lines(db_conn, table, osm_type, osm_id, osm_class):
function pytest_pycollect_makemodule (line 381) | def pytest_pycollect_makemodule(module_path, parent):
class BddTestCollector (line 385) | class BddTestCollector(pytest.Module):
method __init__ (line 387) | def __init__(self, **kwargs):
method collect (line 390) | def collect(self):
function make_python_name (line 404) | def make_python_name(string: str) -> str:
class FeatureFile (line 410) | class FeatureFile(pytest.File):
class obj (line 411) | class obj:
method __init__ (line 414) | def __init__(self, feature, **kwargs):
method collect (line 418) | def collect(self):
FILE: test/bdd/test_api.py
function session_api_test_db (line 40) | def session_api_test_db(pytestconfig):
function test_config_env (line 76) | def test_config_env(pytestconfig):
function api_http_request_headers (line 90) | def api_http_request_headers():
function set_additional_http_headers (line 95) | def set_additional_http_headers(api_http_request_headers, datatable):
function setup_connection_unknown_database (line 101) | def setup_connection_unknown_database(test_config_env):
function send_api_status (line 108) | def send_api_status(test_config_env, api_http_request_headers, pytestcon...
function check_http_result (line 115) | def check_http_result(api_response, status):
function check_page_content_exact (line 120) | def check_page_content_exact(api_response, content):
function check_for_html_correctness (line 125) | def check_for_html_correctness(api_response):
function parse_api_json_response (line 142) | def parse_api_json_response(api_response, fmt, num):
FILE: test/bdd/test_db.py
function _rewrite_placeid_field (line 34) | def _rewrite_placeid_field(field, new_field, datatable, place_ids):
function _collect_place_ids (line 44) | def _collect_place_ids(conn):
function row_factory (line 55) | def row_factory(db_conn):
function test_config_env (line 83) | def test_config_env(pytestconfig):
function update_config (line 97) | def update_config(def_config):
function import_places (line 106) | def import_places(db_conn, named, datatable, node_grid):
function import_place_entrances (line 117) | def import_place_entrances(row_factory, datatable, node_grid):
function import_place_interpolations (line 133) | def import_place_interpolations(row_factory, datatable, node_grid):
function import_place_postcode (line 150) | def import_place_postcode(db_conn, datatable, node_grid):
function import_ways (line 185) | def import_ways(row_factory, datatable):
function import_rels (line 200) | def import_rels(row_factory, datatable):
function do_import (line 232) | def do_import(db_conn, def_config):
function do_update (line 245) | def do_update(db_conn, update_config, node_grid, datatable):
function do_update_relations (line 261) | def do_update_relations(db_conn, update_config, datatable):
function update_place_entrances (line 292) | def update_place_entrances(db_conn, datatable, node_grid):
function update_place_interpolations (line 310) | def update_place_interpolations(db_conn, row_factory, update_config, dat...
function do_postcode_update (line 332) | def do_postcode_update(update_config):
function do_delete_place (line 340) | def do_delete_place(db_conn, update_config, node_grid, otype, oid):
function then_check_table_content (line 361) | def then_check_table_content(db_conn, place_ids, datatable, node_grid, t...
function then_check_place_missing_lines (line 376) | def then_check_place_missing_lines(db_conn, place_ids, table, oid):
function then_check_interpolation_table (line 388) | def then_check_interpolation_table(db_conn, node_grid, place_ids, oid, d...
function then_check_interpolation_table_negative (line 420) | def then_check_interpolation_table_negative(db_conn, oid):
FILE: test/bdd/test_osm2pgsql.py
function osm2pgsql_options (line 26) | def osm2pgsql_options(def_config):
function opl_writer (line 40) | def opl_writer(tmp_path, node_grid):
function set_lua_style_file (line 60) | def set_lua_style_file(osm2pgsql_options, docstring, tmp_path):
function load_from_osm_file (line 69) | def load_from_osm_file(db, osm2pgsql_options, opl_writer, docstring):
function update_from_osm_file (line 81) | def update_from_osm_file(db_conn, def_config, osm2pgsql_options, opl_wri...
function do_index (line 98) | def do_index(def_config):
function check_place_content (line 105) | def check_place_content(db_conn, datatable, node_grid, table, exact):
FILE: test/bdd/utils/api_result.py
class APIResult (line 14) | class APIResult:
method __init__ (line 16) | def __init__(self, fmt, endpoint, body):
method is_simple (line 19) | def is_simple(self):
method __len__ (line 22) | def __len__(self):
method __str__ (line 25) | def __str__(self):
method _parse_json (line 28) | def _parse_json(self, _, body):
method _parse_xml (line 32) | def _parse_xml(self, endpoint, body):
method _parse_xml_simple (line 44) | def _parse_xml_simple(self, xml):
method _parse_xml_multi (line 71) | def _parse_xml_multi(self, xml):
method _parse_geojson (line 96) | def _parse_geojson(self, _, body):
method _parse_geocodejson (line 121) | def _parse_geocodejson(self, endpoint, body):
FILE: test/bdd/utils/api_runner.py
class APIRunner (line 16) | class APIRunner:
method __init__ (line 19) | def __init__(self, environ, api_engine):
method run (line 23) | def run(self, endpoint, params, http_headers):
method run_step (line 26) | def run_step(self, endpoint, base_params, datatable, fmt, http_headers):
method create_engine_falcon (line 38) | def create_engine_falcon(self, environ):
method create_engine_starlette (line 54) | def create_engine_starlette(self, environ):
FILE: test/bdd/utils/checks.py
function _pretty (line 28) | def _pretty(obj):
function _pt_close (line 32) | def _pt_close(p1, p2):
function within_box (line 37) | def within_box(value, expect):
class ResultAttr (line 73) | class ResultAttr:
method __init__ (line 93) | def __init__(self, obj, key, grid=None):
method __eq__ (line 121) | def __eq__(self, other):
method __repr__ (line 139) | def __repr__(self):
method compare_wkt (line 145) | def compare_wkt(self, value, expected):
method get_point (line 202) | def get_point(self, pt):
function check_table_content (line 212) | def check_table_content(conn, tablename, data, grid=None, exact=False):
FILE: test/bdd/utils/db.py
class DBManager (line 22) | class DBManager:
method __init__ (line 24) | def __init__(self, purge=False):
method check_for_db (line 27) | def check_for_db(self, dbname):
method drop_db (line 38) | def drop_db(self, dbname):
method exists_db (line 46) | def exists_db(self, dbname):
method create_db_from_template (line 54) | def create_db_from_template(self, dbname, template):
method setup_template_db (line 66) | def setup_template_db(self, config):
FILE: test/bdd/utils/grid.py
class Grid (line 14) | class Grid:
method __init__ (line 16) | def __init__(self, table, step, origin):
method get (line 32) | def get(self, nodeid):
method parse_point (line 37) | def parse_point(self, value):
method parse_line (line 46) | def parse_line(self, value):
method geometry_to_wkt (line 49) | def geometry_to_wkt(self, value):
FILE: test/bdd/utils/place_inserter.py
class PlaceColumn (line 18) | class PlaceColumn:
method __init__ (line 22) | def __init__(self, grid=None):
method add_row (line 27) | def add_row(self, headings, row, force_name):
method _add (line 45) | def _add(self, key, value):
method _set_key_name (line 59) | def _set_key_name(self, value):
method _set_key_osm (line 62) | def _set_key_osm(self, value):
method _set_key_admin (line 69) | def _set_key_admin(self, value):
method _set_key_housenr (line 72) | def _set_key_housenr(self, value):
method _set_key_postcode (line 76) | def _set_key_postcode(self, value):
method _set_key_street (line 80) | def _set_key_street(self, value):
method _set_key_addr_place (line 84) | def _set_key_addr_place(self, value):
method _set_key_country (line 88) | def _set_key_country(self, value):
method _set_key_geometry (line 92) | def _set_key_geometry(self, value):
method _add_hstore (line 100) | def _add_hstore(self, column, key, value):
method get_wkt (line 106) | def get_wkt(self):
method db_delete (line 117) | def db_delete(self, cursor):
method db_insert (line 123) | def db_insert(self, cursor):
FILE: test/python/api/conftest.py
class APITester (line 23) | class APITester:
method __init__ (line 25) | def __init__(self):
method async_to_sync (line 29) | def async_to_sync(self, func):
method add_data (line 35) | def add_data(self, table, data):
method add_placex (line 41) | def add_placex(self, **kw):
method add_address_placex (line 74) | def add_address_placex(self, object_id, **kw):
method add_osmline (line 84) | def add_osmline(self, **kw):
method add_tiger (line 100) | def add_tiger(self, **kw):
method add_postcode (line 110) | def add_postcode(self, **kw):
method add_country (line 125) | def add_country(self, country_code, geometry):
method add_country_name (line 131) | def add_country_name(self, country_code, names, partition=0):
method add_search_name (line 137) | def add_search_name(self, place_id, **kw):
method add_class_type_table (line 149) | def add_class_type_table(self, cls, typ):
method add_word_table (line 156) | def add_word_table(self, content):
method exec_async (line 171) | async def exec_async(self, sql, *args, **kwargs):
method create_tables (line 175) | async def create_tables(self):
function apiobj (line 181) | def apiobj(temp_db_with_extensions, temp_db_conn, monkeypatch):
function frontend (line 199) | def frontend(request, tmp_path):
function api (line 239) | async def api(temp_db):
FILE: test/python/api/fake_adaptor.py
class FakeError (line 17) | class FakeError(BaseException):
method __init__ (line 19) | def __init__(self, msg, status):
method __str__ (line 23) | def __str__(self):
class FakeAdaptor (line 30) | class FakeAdaptor(glue.ASGIAdaptor):
method __init__ (line 32) | def __init__(self, params=None, headers=None, config=None):
method get (line 37) | def get(self, name, default=None):
method get_header (line 40) | def get_header(self, name, default=None):
method error (line 43) | def error(self, msg, status=400):
method create_response (line 46) | def create_response(self, status, output, num_results):
method base_uri (line 49) | def base_uri(self):
method config (line 52) | def config(self):
method formatting (line 55) | def formatting(self):
method query_stats (line 58) | def query_stats(self):
FILE: test/python/api/query_processing/test_normalize.py
function run_preprocessor_on (line 17) | def run_preprocessor_on(query, norm):
function test_normalize_simple (line 24) | def test_normalize_simple():
FILE: test/python/api/query_processing/test_regex_replace.py
function run_preprocessor_on (line 17) | def run_preprocessor_on(query):
function test_split_phrases (line 45) | def test_split_phrases(inp, outp):
FILE: test/python/api/query_processing/test_split_japanese_phrases.py
function run_preprocessor_on (line 17) | def run_preprocessor_on(query):
function test_split_phrases (line 26) | def test_split_phrases(inp, outp):
FILE: test/python/api/search/test_api_search_query.py
class MyToken (line 15) | class MyToken(query.Token):
method get_category (line 17) | def get_category(self):
method get_country (line 20) | def get_country(self):
function mktoken (line 24) | def mktoken(tid: int):
function qnode (line 30) | def qnode():
function test_phrase_compatible (line 40) | def test_phrase_compatible(ptype, ttype):
function test_phrase_incompatible (line 45) | def test_phrase_incompatible(ptype):
function test_query_node_empty (line 49) | def test_query_node_empty(qnode):
function test_query_node_with_content (line 53) | def test_query_node_with_content(qnode):
function test_query_struct_empty (line 67) | def test_query_struct_empty():
function test_query_struct_with_tokens (line 73) | def test_query_struct_with_tokens():
function test_query_struct_incompatible_token (line 97) | def test_query_struct_incompatible_token():
function test_query_struct_amenity_single_word (line 108) | def test_query_struct_amenity_single_word():
function test_query_struct_amenity_two_words (line 121) | def test_query_struct_amenity_two_words():
FILE: test/python/api/search/test_db_search_builder.py
class MyToken (line 23) | class MyToken(Token):
method get_category (line 26) | def get_category(self):
method get_country (line 29) | def get_country(self):
function make_query (line 33) | def make_query(*args):
function test_country_search (line 54) | def test_country_search():
function test_country_search_with_country_restriction (line 71) | def test_country_search_with_country_restriction():
function test_country_search_with_conflicting_country_restriction (line 88) | def test_country_search_with_conflicting_country_restriction():
function test_postcode_search_simple (line 100) | def test_postcode_search_simple():
function test_postcode_with_country (line 116) | def test_postcode_with_country():
function test_postcode_with_address (line 137) | def test_postcode_with_address():
function test_postcode_with_address_with_full_word (line 155) | def test_postcode_with_address_with_full_word():
function test_near_item_only (line 176) | def test_near_item_only(kwargs):
function test_near_item_skipped (line 192) | def test_near_item_skipped(kwargs):
function test_name_only_search (line 201) | def test_name_only_search():
function test_name_with_qualifier (line 219) | def test_name_with_qualifier():
function test_name_with_housenumber_search (line 239) | def test_name_with_housenumber_search():
function test_name_and_address (line 259) | def test_name_and_address():
function test_name_and_complex_address (line 282) | def test_name_and_complex_address():
function test_name_only_near_search (line 306) | def test_name_only_near_search():
function test_name_only_search_with_category (line 322) | def test_name_only_search_with_category():
function test_name_with_near_item_search_with_category_mismatch (line 336) | def test_name_with_near_item_search_with_category_mismatch():
function test_name_with_near_item_search_with_category_match (line 348) | def test_name_with_near_item_search_with_category_match():
function test_name_with_qualifier_search_with_category_mismatch (line 365) | def test_name_with_qualifier_search_with_category_mismatch():
function test_name_with_qualifier_search_with_category_match (line 377) | def test_name_with_qualifier_search_with_category_match():
function test_name_only_search_with_countries (line 394) | def test_name_only_search_with_countries():
function make_counted_searches (line 409) | def make_counted_searches(name_part, name_full, address_part, address_full,
function test_infrequent_partials_in_name (line 432) | def test_infrequent_partials_in_name():
function test_frequent_partials_in_name_and_address (line 446) | def test_frequent_partials_in_name_and_address():
function test_too_frequent_partials_in_name_and_address (line 460) | def test_too_frequent_partials_in_name_and_address():
FILE: test/python/api/search/test_icu_query_analyzer.py
function add_word (line 20) | async def add_word(conn, word_id, word_token, wtype, word, info=None):
function make_phrase (line 29) | def make_phrase(query):
function conn (line 34) | async def conn(table_factory):
function test_empty_phrase (line 50) | async def test_empty_phrase(conn):
function test_single_phrase_with_unknown_terms (line 60) | async def test_single_phrase_with_unknown_terms(conn):
function test_multiple_phrases (line 77) | async def test_multiple_phrases(conn):
function test_splitting_in_transliteration (line 91) | async def test_splitting_in_transliteration(conn):
function test_penalty_postcodes_and_housenumbers (line 108) | async def test_penalty_postcodes_and_housenumbers(conn, term, order):
function test_category_words_only_at_beginning (line 128) | async def test_category_words_only_at_beginning(conn):
function test_freestanding_qualifier_words_become_category (line 143) | async def test_freestanding_qualifier_words_become_category(conn):
function test_qualifier_words (line 156) | async def test_qualifier_words(conn):
function test_add_unknown_housenumbers (line 171) | async def test_add_unknown_housenumbers(conn):
function test_log_output (line 193) | async def test_log_output(conn, logtype):
FILE: test/python/api/search/test_postcode_parser.py
function pc_config (line 21) | def pc_config(project_env):
function mk_query (line 66) | def mk_query(inp):
function test_simple_postcode (line 84) | def test_simple_postcode(pc_config, query, pos):
function test_postcode_matching_case_insensitive (line 93) | def test_postcode_matching_case_insensitive(pc_config, query):
function test_contained_postcode (line 99) | def test_contained_postcode(pc_config):
function test_postcode_with_space (line 109) | def test_postcode_with_space(pc_config, query, frm, to):
function test_overlapping_postcode (line 117) | def test_overlapping_postcode(pc_config):
function test_not_a_postcode (line 126) | def test_not_a_postcode(pc_config, query):
function test_postcode_with_country_prefix (line 133) | def test_postcode_with_country_prefix(pc_config, query):
function test_postcode_with_joined_country_prefix (line 139) | def test_postcode_with_joined_country_prefix(pc_config):
function test_postcode_with_non_matching_country_prefix (line 145) | def test_postcode_with_non_matching_country_prefix(pc_config):
function test_postcode_inside_postcode_phrase (line 151) | def test_postcode_inside_postcode_phrase(pc_config):
function test_partial_postcode_in_postcode_phrase (line 163) | def test_partial_postcode_in_postcode_phrase(pc_config):
FILE: test/python/api/search/test_query.py
function test_token_range_equal (line 15) | def test_token_range_equal():
function test_token_range_unequal (line 23) | def test_token_range_unequal(lop, rop):
function test_token_range_lt (line 28) | def test_token_range_lt():
function test_token_rankge_gt (line 36) | def test_token_rankge_gt():
function test_token_range_unimplemented_ops (line 45) | def test_token_range_unimplemented_ops():
function test_query_extract_words (line 52) | def test_query_extract_words():
FILE: test/python/api/search/test_query_analyzer_factory.py
function test_import_icu_tokenizer (line 17) | async def test_import_icu_tokenizer(table_factory, api):
function test_import_missing_property (line 31) | async def test_import_missing_property(table_factory, api):
function test_import_missing_module (line 41) | async def test_import_missing_module(table_factory, api):
FILE: test/python/api/search/test_search_address.py
function run_search (line 22) | def run_search(apiobj, frontend, global_penalty, lookup, ranking, count=2,
class TestStreetWithHousenumber (line 51) | class TestStreetWithHousenumber:
method fill_database (line 54) | def fill_database(self, apiobj):
method test_lookup_by_single_housenumber (line 86) | def test_lookup_by_single_housenumber(self, apiobj, frontend, hnr, res):
method test_lookup_with_country_restriction (line 95) | def test_lookup_with_country_restriction(self, apiobj, frontend, cc, r...
method test_lookup_exclude_housenumber_placeid (line 104) | def test_lookup_exclude_housenumber_placeid(self, apiobj, frontend):
method test_lookup_exclude_street_placeid (line 113) | def test_lookup_exclude_street_placeid(self, apiobj, frontend):
method test_lookup_only_house_qualifier (line 122) | def test_lookup_only_house_qualifier(self, apiobj, frontend):
method test_lookup_only_street_qualifier (line 131) | def test_lookup_only_street_qualifier(self, apiobj, frontend):
method test_lookup_min_rank (line 141) | def test_lookup_min_rank(self, apiobj, frontend, rank, found):
method test_return_geometries (line 154) | def test_return_geometries(self, apiobj, frontend, geom):
function test_very_large_housenumber (line 164) | def test_very_large_housenumber(apiobj, frontend):
class TestInterpolations (line 184) | class TestInterpolations:
method fill_database (line 187) | def fill_database(self, apiobj):
method test_lookup_housenumber (line 206) | def test_lookup_housenumber(self, apiobj, frontend, hnr, res):
method test_osmline_with_geometries (line 217) | def test_osmline_with_geometries(self, apiobj, frontend, geom):
class TestTiger (line 227) | class TestTiger:
method fill_database (line 230) | def fill_database(self, apiobj):
method test_lookup_housenumber (line 251) | def test_lookup_housenumber(self, apiobj, frontend, hnr, res):
method test_tiger_with_geometries (line 262) | def test_tiger_with_geometries(self, apiobj, frontend, geom):
FILE: test/python/api/search/test_search_country.py
function run_search (line 18) | def run_search(apiobj, frontend, global_penalty, ccodes,
function test_find_from_placex (line 37) | def test_find_from_placex(apiobj, frontend):
function test_find_from_fallback_countries (line 52) | def test_find_from_fallback_countries(apiobj, frontend):
function test_find_none (line 62) | def test_find_none(apiobj, frontend):
function test_find_near (line 67) | def test_find_near(apiobj, frontend, coord, numres):
class TestCountryParameters (line 78) | class TestCountryParameters:
method fill_database (line 81) | def fill_database(self, apiobj):
method test_return_geometries (line 96) | def test_return_geometries(self, apiobj, frontend, geom, cc):
method test_exclude_place_id (line 104) | def test_exclude_place_id(self, apiobj, frontend, pid, rids):
method test_bounded_viewbox_in_placex (line 112) | def test_bounded_viewbox_in_placex(self, apiobj, frontend, viewbox, ri...
method test_bounded_viewbox_in_fallback (line 121) | def test_bounded_viewbox_in_fallback(self, apiobj, frontend, viewbox, ...
FILE: test/python/api/search/test_search_near.py
function run_search (line 20) | def run_search(apiobj, frontend, global_penalty, cat, cat_penalty=None, ...
function test_no_results_inner_query (line 54) | def test_no_results_inner_query(apiobj, frontend):
function test_no_appropriate_results_inner_query (line 58) | def test_no_appropriate_results_inner_query(apiobj, frontend):
class TestNearSearch (line 70) | class TestNearSearch:
method fill_database (line 73) | def fill_database(self, apiobj):
method test_near_in_placex (line 83) | def test_near_in_placex(self, apiobj, frontend):
method test_multiple_types_near_in_placex (line 93) | def test_multiple_types_near_in_placex(self, apiobj, frontend):
method test_near_in_classtype (line 106) | def test_near_in_classtype(self, apiobj, frontend):
method test_restrict_by_country (line 119) | def test_restrict_by_country(self, apiobj, frontend, cc, rid):
method test_exclude_place_by_id (line 138) | def test_exclude_place_by_id(self, apiobj, frontend, excluded, rid):
method test_with_layer (line 153) | def test_with_layer(self, apiobj, frontend, layer, rids):
FILE: test/python/api/search/test_search_places.py
function run_search (line 24) | def run_search(apiobj, frontend, global_penalty, lookup, ranking, count=2,
class TestNameOnlySearches (line 53) | class TestNameOnlySearches:
method fill_database (line 56) | def fill_database(self, apiobj):
method test_lookup_all_match (line 69) | def test_lookup_all_match(self, apiobj, frontend, lookup_type, rank, r...
method test_lookup_all_partial_match (line 78) | def test_lookup_all_partial_match(self, apiobj, frontend, lookup_type):
method test_lookup_any_match (line 89) | def test_lookup_any_match(self, apiobj, frontend, rank, res):
method test_lookup_any_partial_match (line 97) | def test_lookup_any_partial_match(self, apiobj, frontend):
method test_lookup_restrict_country (line 107) | def test_lookup_restrict_country(self, apiobj, frontend, cc, res):
method test_lookup_restrict_placeid (line 115) | def test_lookup_restrict_placeid(self, apiobj, frontend):
method test_return_geometries (line 128) | def test_return_geometries(self, apiobj, frontend, geom):
method test_return_simplified_geometry (line 138) | def test_return_simplified_geometry(self, apiobj, frontend, factor, np...
method test_prefer_viewbox (line 163) | def test_prefer_viewbox(self, apiobj, frontend, viewbox, rids, wcount):
method test_force_viewbox (line 176) | def test_force_viewbox(self, apiobj, frontend, viewbox):
method test_prefer_near (line 185) | def test_prefer_near(self, apiobj, frontend):
method test_force_near (line 199) | def test_force_near(self, apiobj, frontend, radius):
function test_name_and_postcode (line 211) | def test_name_and_postcode(apiobj, frontend, wcount, rids):
class TestLayersRank30 (line 238) | class TestLayersRank30:
method fill_database (line 241) | def fill_database(self, apiobj):
method test_layers_rank30 (line 283) | def test_layers_rank30(self, apiobj, frontend, layer, res):
FILE: test/python/api/search/test_search_poi.py
function run_search (line 17) | def run_search(apiobj, frontend, global_penalty, poitypes, poi_penalties...
function test_simple_near_search_in_placex (line 40) | def test_simple_near_search_in_placex(apiobj, frontend, coord, pid):
function test_simple_near_search_in_classtype (line 56) | def test_simple_near_search_in_classtype(apiobj, frontend, coord, pid):
class TestPoiSearchWithRestrictions (line 70) | class TestPoiSearchWithRestrictions:
method fill_database (line 73) | def fill_database(self, apiobj, request):
method test_unrestricted (line 86) | def test_unrestricted(self, apiobj, frontend):
method test_restict_country (line 92) | def test_restict_country(self, apiobj, frontend):
method test_restrict_by_viewbox (line 99) | def test_restrict_by_viewbox(self, apiobj, frontend):
FILE: test/python/api/search/test_search_postcode.py
function poly_around (line 19) | def poly_around(x, y, diff=0.01):
function run_search (line 24) | def run_search(apiobj, frontend, global_penalty, pcs, pc_penalties=None,
function test_postcode_only_search (line 47) | def test_postcode_only_search(apiobj, frontend):
function test_postcode_with_country (line 57) | def test_postcode_with_country(apiobj, frontend):
function test_postcode_area (line 69) | def test_postcode_area(apiobj, frontend):
class TestPostcodeSearchWithAddress (line 81) | class TestPostcodeSearchWithAddress:
method fill_database (line 84) | def fill_database(self, apiobj):
method test_lookup_both (line 104) | def test_lookup_both(self, apiobj, frontend):
method test_restrict_by_name (line 112) | def test_restrict_by_name(self, apiobj, frontend):
method test_lookup_near (line 121) | def test_lookup_near(self, apiobj, frontend, coord, place_id):
method test_return_geometries (line 136) | def test_return_geometries(self, apiobj, frontend, geom):
method test_prefer_viewbox (line 145) | def test_prefer_viewbox(self, apiobj, frontend, viewbox, rids):
method test_restrict_to_viewbox (line 153) | def test_restrict_to_viewbox(self, apiobj, frontend, viewbox, rid):
method test_prefer_near (line 162) | def test_prefer_near(self, apiobj, frontend, coord, rids):
method test_exclude (line 169) | def test_exclude(self, apiobj, frontend, pid, rid):
FILE: test/python/api/search/test_token_assignment.py
class MyToken (line 19) | class MyToken(Token):
method get_category (line 20) | def get_category(self):
method get_country (line 23) | def get_country(self):
function make_query (line 27) | def make_query(*args):
function check_assignments (line 44) | def check_assignments(actual, *expected):
function test_query_with_missing_tokens (line 53) | def test_query_with_missing_tokens():
function test_one_word_query (line 60) | def test_one_word_query():
function test_single_postcode (line 70) | def test_single_postcode():
function test_single_country_name (line 78) | def test_single_country_name():
function test_single_word_poi_search (line 86) | def test_single_word_poi_search():
function test_multiple_simple_words (line 96) | def test_multiple_simple_words(btype):
function test_multiple_words_respect_phrase_break (line 115) | def test_multiple_words_respect_phrase_break():
function test_housenumber_and_street (line 126) | def test_housenumber_and_street():
function test_housenumber_and_street_backwards (line 137) | def test_housenumber_and_street_backwards():
function test_housenumber_and_postcode (line 148) | def test_housenumber_and_postcode():
function test_postcode_and_housenumber (line 166) | def test_postcode_and_housenumber():
function test_country_housenumber_postcode (line 184) | def test_country_housenumber_postcode():
function test_housenumber_with_only_special_terms (line 195) | def test_housenumber_with_only_special_terms(ttype):
function test_multiple_special_tokens (line 203) | def test_multiple_special_tokens(ttype):
function test_housenumber_many_phrases (line 211) | def test_housenumber_many_phrases():
function test_country_at_beginning (line 230) | def test_country_at_beginning():
function test_country_at_end (line 239) | def test_country_at_end():
function test_country_in_middle (line 248) | def test_country_in_middle():
function test_postcode_with_designation (line 256) | def test_postcode_with_designation():
function test_postcode_with_designation_backwards (line 267) | def test_postcode_with_designation_backwards():
function test_near_item_at_beginning (line 278) | def test_near_item_at_beginning():
function test_near_item_at_end (line 287) | def test_near_item_at_end():
function test_near_item_in_middle (line 296) | def test_near_item_in_middle():
function test_qualifier_at_beginning (line 304) | def test_qualifier_at_beginning():
function test_qualifier_after_name (line 317) | def test_qualifier_after_name():
function test_qualifier_before_housenumber (line 333) | def test_qualifier_before_housenumber():
function test_qualifier_after_housenumber (line 341) | def test_qualifier_after_housenumber():
function test_qualifier_in_middle_of_phrase (line 349) | def test_qualifier_in_middle_of_phrase():
FILE: test/python/api/test_api_connection.py
function test_run_scalar (line 16) | async def test_run_scalar(api, table_factory):
function test_run_execute (line 24) | async def test_run_execute(api, table_factory):
function test_get_property_existing_cached (line 33) | async def test_get_property_existing_cached(api, table_factory):
function test_get_property_existing_uncached (line 47) | async def test_get_property_existing_uncached(api, table_factory):
function test_get_property_missing (line 62) | async def test_get_property_missing(api, table_factory, param):
function test_get_db_property_existing (line 72) | async def test_get_db_property_existing(api):
function test_get_db_property_bad_name (line 78) | async def test_get_db_property_bad_name(api):
FILE: test/python/api/test_api_deletable_v1.py
class TestDeletableEndPoint (line 19) | class TestDeletableEndPoint:
method setup_deletable_table (line 22) | def setup_deletable_table(self, temp_db_cursor, table_factory, temp_db...
method test_deletable (line 37) | async def test_deletable(self, api):
FILE: test/python/api/test_api_details.py
function test_lookup_in_placex (line 19) | def test_lookup_in_placex(apiobj, frontend, idobj):
function test_lookup_in_placex_minimal_info (line 75) | def test_lookup_in_placex_minimal_info(apiobj, frontend):
function test_lookup_in_placex_with_geometry (line 126) | def test_lookup_in_placex_with_geometry(apiobj, frontend):
function test_lookup_placex_with_address_details (line 136) | def test_lookup_placex_with_address_details(apiobj, frontend):
function test_lookup_place_with_linked_places_none_existing (line 184) | def test_lookup_place_with_linked_places_none_existing(apiobj, frontend):
function test_lookup_place_with_linked_places_existing (line 196) | def test_lookup_place_with_linked_places_existing(apiobj, frontend):
function test_lookup_place_with_parented_places_not_existing (line 227) | def test_lookup_place_with_parented_places_not_existing(apiobj, frontend):
function test_lookup_place_with_parented_places_existing (line 239) | def test_lookup_place_with_parented_places_existing(apiobj, frontend):
function test_lookup_in_osmline (line 266) | def test_lookup_in_osmline(apiobj, frontend, idobj):
function test_lookup_in_osmline_split_interpolation (line 315) | def test_lookup_in_osmline_split_interpolation(apiobj, frontend):
function test_lookup_osmline_with_address_details (line 335) | def test_lookup_osmline_with_address_details(apiobj, frontend):
function test_lookup_in_tiger (line 386) | def test_lookup_in_tiger(apiobj, frontend):
function test_lookup_tiger_with_address_details (line 436) | def test_lookup_tiger_with_address_details(apiobj, frontend):
function test_lookup_in_postcode (line 487) | def test_lookup_in_postcode(apiobj, frontend):
function test_lookup_postcode_with_address_details (line 539) | def test_lookup_postcode_with_address_details(apiobj, frontend, lookup):
function test_lookup_missing_object (line 589) | def test_lookup_missing_object(apiobj, frontend, objid):
function test_lookup_unsupported_geometry (line 600) | def test_lookup_unsupported_geometry(apiobj, frontend, gtype):
FILE: test/python/api/test_api_lookup.py
function test_lookup_empty_list (line 17) | def test_lookup_empty_list(apiobj, frontend):
function test_lookup_non_existing (line 22) | def test_lookup_non_existing(apiobj, frontend):
function test_lookup_single_placex (line 30) | def test_lookup_single_placex(apiobj, frontend, idobj):
function test_lookup_multiple_places (line 81) | def test_lookup_multiple_places(apiobj, frontend):
function test_simple_place_with_geometry (line 112) | def test_simple_place_with_geometry(apiobj, frontend, gtype):
function test_simple_place_with_geometry_simplified (line 138) | def test_simple_place_with_geometry_simplified(apiobj, frontend):
FILE: test/python/api/test_api_polygons_v1.py
class TestPolygonsEndPoint (line 20) | class TestPolygonsEndPoint:
method setup_deletable_table (line 23) | def setup_deletable_table(self, temp_db_cursor, table_factory, temp_db...
method test_polygons_simple (line 46) | async def test_polygons_simple(self, api):
method test_polygons_days (line 66) | async def test_polygons_days(self, api):
method test_polygons_class (line 76) | async def test_polygons_class(self, api):
method test_polygons_reduced (line 86) | async def test_polygons_reduced(self, api):
FILE: test/python/api/test_api_reverse.py
function test_reverse_rank_30 (line 22) | def test_reverse_rank_30(apiobj, frontend):
function test_reverse_street (line 36) | def test_reverse_street(apiobj, frontend, country):
function test_reverse_ignore_unindexed (line 48) | def test_reverse_ignore_unindexed(apiobj, frontend):
function test_reverse_rank_30_layers (line 73) | def test_reverse_rank_30_layers(apiobj, frontend, y, layer, place_id):
function test_reverse_poi_layer_with_no_pois (line 111) | def test_reverse_poi_layer_with_no_pois(apiobj, frontend):
function test_reverse_housenumber_on_street (line 124) | def test_reverse_housenumber_on_street(apiobj, frontend, with_geom):
function test_reverse_housenumber_interpolation (line 156) | def test_reverse_housenumber_interpolation(apiobj, frontend, with_geom):
function test_reverse_housenumber_point_interpolation (line 190) | def test_reverse_housenumber_point_interpolation(apiobj, frontend):
function test_reverse_tiger_number (line 208) | def test_reverse_tiger_number(apiobj, frontend):
function test_reverse_point_tiger (line 226) | def test_reverse_point_tiger(apiobj, frontend):
function test_reverse_low_zoom_address (line 245) | def test_reverse_low_zoom_address(apiobj, frontend):
function test_reverse_place_node_in_area (line 264) | def test_reverse_place_node_in_area(apiobj, frontend):
function test_reverse_larger_area_layers (line 288) | def test_reverse_larger_area_layers(apiobj, frontend, layer, place_id):
function test_reverse_country_lookup_no_objects (line 309) | def test_reverse_country_lookup_no_objects(apiobj, frontend):
function test_reverse_country_lookup_country_only (line 318) | def test_reverse_country_lookup_country_only(apiobj, frontend, rank, wit...
function test_reverse_country_lookup_place_node_inside (line 338) | def test_reverse_country_lookup_place_node_inside(apiobj, frontend, with...
function test_reverse_geometry_output_placex (line 364) | def test_reverse_geometry_output_placex(apiobj, frontend, gtype):
function test_reverse_simplified_geometry (line 384) | def test_reverse_simplified_geometry(apiobj, frontend):
function test_reverse_interpolation_geometry (line 397) | def test_reverse_interpolation_geometry(apiobj, frontend):
function test_reverse_tiger_geometry (line 410) | def test_reverse_tiger_geometry(apiobj, frontend):
FILE: test/python/api/test_api_search.py
function setup_icu_tokenizer (line 21) | def setup_icu_tokenizer(apiobj):
function test_search_no_content (line 32) | def test_search_no_content(apiobj, frontend):
function test_search_simple_word (line 39) | def test_search_simple_word(apiobj, frontend):
function test_search_with_debug (line 54) | def test_search_with_debug(apiobj, frontend, logtype):
function test_address_no_content (line 69) | def test_address_no_content(apiobj, frontend):
function test_address_simple_places (line 86) | def test_address_simple_places(apiobj, frontend, atype, address, search):
function test_address_country (line 101) | def test_address_country(apiobj, frontend):
function test_category_no_categories (line 110) | def test_category_no_categories(apiobj, frontend):
function test_category_no_content (line 117) | def test_category_no_content(apiobj, frontend):
function test_category_simple_restaurant (line 124) | def test_category_simple_restaurant(apiobj, frontend):
function test_category_with_search_phrase (line 138) | def test_category_with_search_phrase(apiobj, frontend):
FILE: test/python/api/test_api_status.py
function test_status_no_extra_info (line 19) | def test_status_no_extra_info(apiobj, frontend):
function test_status_full (line 30) | def test_status_full(apiobj, frontend):
function test_status_database_not_found (line 47) | def test_status_database_not_found(monkeypatch):
function test_status_connection_timeout_single_pool (line 62) | async def test_status_connection_timeout_single_pool(status_table, prope...
function test_status_connection_timeout_multi_pool (line 75) | async def test_status_connection_timeout_multi_pool(status_table, proper...
FILE: test/python/api/test_api_types.py
function test_no_params_defaults (line 16) | def test_no_params_defaults():
function test_bad_format_reverse (line 26) | def test_bad_format_reverse(k, v):
function test_rank_params (line 33) | def test_rank_params(rin, rout):
class TestFormatExcluded (line 39) | class TestFormatExcluded:
method test_empty_value (line 42) | def test_empty_value(self, inp):
method test_valid_exclude_ids (line 60) | def test_valid_exclude_ids(self, inp, expected):
method test_invalid_exclude_ids (line 71) | def test_invalid_exclude_ids(self, inp, bad_id):
method test_invalid_list_element_type (line 76) | def test_invalid_list_element_type(self, inp):
FILE: test/python/api/test_export.py
function run_export (line 16) | def run_export(tmp_path, capsys):
function setup_database_with_context (line 26) | def setup_database_with_context(apiobj):
function test_export_default (line 44) | def test_export_default(run_export):
function test_export_output_type (line 50) | def test_export_output_type(run_export):
function test_export_output_format (line 56) | def test_export_output_format(run_export):
function test_export_restrict_to_node_good (line 62) | def test_export_restrict_to_node_good(run_export):
function test_export_restrict_to_node_not_address (line 68) | def test_export_restrict_to_node_not_address(run_export):
FILE: test/python/api/test_helpers_v1.py
function test_extract_coords_no_coords (line 20) | def test_extract_coords_no_coords(inp):
function test_extract_coords_null_island (line 28) | def test_extract_coords_null_island():
function test_extract_coords_with_text_before (line 32) | def test_extract_coords_with_text_before():
function test_extract_coords_with_text_after (line 36) | def test_extract_coords_with_text_after():
function test_extract_coords_with_spaces (line 41) | def test_extract_coords_with_spaces(inp):
function test_extract_coords_formats (line 75) | def test_extract_coords_formats(inp):
function test_extract_coords_formats_southeast (line 95) | def test_extract_coords_formats_southeast():
function test_extract_category_good (line 107) | def test_extract_category_good(inp):
function test_extract_category_only (line 115) | def test_extract_category_only():
function test_extract_category_no_match (line 120) | def test_extract_category_no_match(inp):
FILE: test/python/api/test_localization.py
function test_display_name_empty_names (line 15) | def test_display_name_empty_names():
function test_display_name_none_localized (line 22) | def test_display_name_none_localized():
function test_output_names_none_localized (line 30) | def test_output_names_none_localized():
function test_output_names_none_localized_and_custom_output_names (line 40) | def test_output_names_none_localized_and_custom_output_names():
function test_output_names_none_localized_and_custom_output_names_more_than_two_changes (line 51) | def test_output_names_none_localized_and_custom_output_names_more_than_t...
function test_output_names_none_localized_and_custom_output_names_including_space (line 63) | def test_output_names_none_localized_and_custom_output_names_including_s...
function test_display_name_localized (line 73) | def test_display_name_localized():
function test_output_names_localized (line 81) | def test_output_names_localized():
function test_output_names_localized_and_empty_names (line 91) | def test_output_names_localized_and_empty_names():
function test_output_names_localized_and_custom_names_ordering_logic (line 98) | def test_output_names_localized_and_custom_names_ordering_logic():
function test_output_names_localized_and_custom_output_names_including_space (line 109) | def test_output_names_localized_and_custom_output_names_including_space():
function test_output_names_localized_and_custom_output_names (line 122) | def test_output_names_localized_and_custom_output_names():
function test_output_names_localized_and_custom_output_names_start_with_tag_that_has_no_XX (line 138) | def test_output_names_localized_and_custom_output_names_start_with_tag_t...
function test_output_names_localized_and_custom_output_names_no_named_tags (line 153) | def test_output_names_localized_and_custom_output_names_no_named_tags():
function test_output_names_localized_and_custom_output_names_only_named_tags (line 163) | def test_output_names_localized_and_custom_output_names_only_named_tags():
function test_output_names_localized_and_custom_output_names_more_than_two_changes (line 178) | def test_output_names_localized_and_custom_output_names_more_than_two_ch...
function test_output_names_localized_and_custom_output_names_XX_in_the_middle (line 194) | def test_output_names_localized_and_custom_output_names_XX_in_the_middle():
function test_display_name_preference (line 210) | def test_display_name_preference():
function test_from_language_preferences (line 226) | def test_from_language_preferences(langstr, langlist):
FILE: test/python/api/test_result_formatting_v1.py
function test_status_format_list (line 27) | def test_status_format_list():
function test_status_supported (line 32) | def test_status_supported(fmt):
function test_status_unsupported (line 36) | def test_status_unsupported():
function test_status_format_text (line 40) | def test_status_format_text():
function test_status_format_error_text (line 45) | def test_status_format_error_text():
function test_status_format_json_minimal (line 50) | def test_status_format_json_minimal():
function test_status_format_json_full (line 60) | def test_status_format_json_full():
function test_search_details_minimal (line 76) | def test_search_details_minimal():
function test_search_details_full (line 100) | def test_search_details_full():
function test_search_details_no_geometry (line 158) | def test_search_details_no_geometry(gtype, isarea):
function test_search_details_with_geometry (line 171) | def test_search_details_with_geometry():
function test_search_details_with_icon_available (line 185) | def test_search_details_with_icon_available():
function test_search_details_with_icon_not_available (line 196) | def test_search_details_with_icon_not_available():
function test_search_details_with_address_minimal (line 207) | def test_search_details_with_address_minimal():
function test_search_details_with_further_infos (line 239) | def test_search_details_with_further_infos(field, outfield):
function test_search_details_grouped_hierarchy (line 273) | def test_search_details_grouped_hierarchy():
function test_search_details_keywords_name (line 306) | def test_search_details_keywords_name():
function test_search_details_keywords_address (line 322) | def test_search_details_keywords_address():
function test_search_extratags_boundary_administrative_injects_admin_level (line 344) | def test_search_extratags_boundary_administrative_injects_admin_level(fmt):
function test_search_extratags_non_boundary_no_admin_level_injection (line 374) | def test_search_extratags_non_boundary_no_admin_level_injection(fmt):
function test_search_extratags_boundary_admin_level_15_no_injection (line 404) | def test_search_extratags_boundary_admin_level_15_no_injection(fmt):
FILE: test/python/api/test_result_formatting_v1_reverse.py
function test_format_reverse_minimal (line 25) | def test_format_reverse_minimal(fmt):
function test_format_reverse_no_result (line 41) | def test_format_reverse_no_result(fmt):
function test_format_reverse_with_osm_id (line 52) | def test_format_reverse_with_osm_id(fmt):
function test_format_reverse_with_address (line 78) | def test_format_reverse_with_address(fmt):
function test_format_reverse_geocodejson_special_parts (line 128) | def test_format_reverse_geocodejson_special_parts():
function test_format_reverse_with_address_none (line 179) | def test_format_reverse_with_address_none(fmt):
function test_format_reverse_with_extratags (line 208) | def test_format_reverse_with_extratags(fmt):
function test_format_reverse_with_extratags_none (line 231) | def test_format_reverse_with_extratags_none(fmt):
function test_format_reverse_with_namedetails_with_name (line 253) | def test_format_reverse_with_namedetails_with_name(fmt):
function test_format_reverse_with_namedetails_without_name (line 276) | def test_format_reverse_with_namedetails_without_name(fmt):
function test_search_details_with_icon_available (line 298) | def test_search_details_with_icon_available(fmt):
function test_search_details_with_icon_not_available (line 312) | def test_search_details_with_icon_not_available(fmt):
FILE: test/python/api/test_results.py
function mkpoint (line 19) | def mkpoint(x, y):
class FakeRow (line 23) | class FakeRow:
method __init__ (line 24) | def __init__(self, **kwargs):
function test_minimal_detailed_result (line 32) | def test_minimal_detailed_result():
function test_detailed_result_custom_importance (line 42) | def test_detailed_result_custom_importance():
function test_create_row_with_housenumber (line 53) | def test_create_row_with_housenumber(func):
function test_create_row_without_housenumber (line 67) | def test_create_row_without_housenumber(func):
FILE: test/python/api/test_server_glue_v1.py
function test_adaptor_get_int_missing_but_required (line 25) | def test_adaptor_get_int_missing_but_required(func):
function test_adaptor_get_int_missing_with_default (line 31) | def test_adaptor_get_int_missing_with_default(func, val):
function test_adaptor_get_int_success (line 36) | def test_adaptor_get_int_success(inp):
function test_adaptor_get_int_bad_number (line 42) | def test_adaptor_get_int_bad_number(inp):
function test_adaptor_get_bool_trueish (line 48) | def test_adaptor_get_bool_trueish(inp):
function test_adaptor_get_bool_falsish (line 52) | def test_adaptor_get_bool_falsish():
function test_adaptor_parse_format_use_default (line 58) | def test_adaptor_parse_format_use_default():
function test_adaptor_parse_format_use_configured (line 65) | def test_adaptor_parse_format_use_configured():
function test_adaptor_parse_format_invalid_value (line 72) | def test_adaptor_parse_format_invalid_value():
function test_accepted_languages_from_param (line 81) | def test_accepted_languages_from_param():
function test_accepted_languages_from_header (line 86) | def test_accepted_languages_from_header():
function test_accepted_languages_from_default (line 91) | def test_accepted_languages_from_default(monkeypatch):
function test_accepted_languages_param_over_header (line 97) | def test_accepted_languages_param_over_header():
function test_accepted_languages_header_over_default (line 103) | def test_accepted_languages_header_over_default(monkeypatch):
class TestAdaptorRaiseError (line 111) | class TestAdaptorRaiseError:
method init_adaptor (line 114) | def init_adaptor(self):
method run_raise_error (line 118) | def run_raise_error(self, msg, status):
method test_without_content_set (line 124) | def test_without_content_set(self):
method test_json (line 131) | def test_json(self):
method test_xml (line 140) | def test_xml(self):
function test_raise_error_during_debug (line 152) | def test_raise_error_during_debug():
function test_build_response_without_content_type (line 170) | def test_build_response_without_content_type():
function test_build_response_with_status (line 179) | def test_build_response_with_status():
function test_build_response_jsonp_with_json (line 191) | def test_build_response_jsonp_with_json():
function test_build_response_jsonp_without_json (line 203) | def test_build_response_jsonp_without_json():
function test_build_response_jsonp_bad_format (line 216) | def test_build_response_jsonp_bad_format(param):
class TestStatusEndpoint (line 226) | class TestStatusEndpoint:
method patch_status_func (line 229) | def patch_status_func(self, monkeypatch):
method test_status_without_params (line 236) | async def test_status_without_params(self):
method test_status_with_error (line 247) | async def test_status_with_error(self):
method test_status_json_with_error (line 258) | async def test_status_json_with_error(self):
method test_status_bad_format (line 269) | async def test_status_bad_format(self):
class TestDetailsEndpoint (line 279) | class TestDetailsEndpoint:
method patch_lookup_func (line 282) | def patch_lookup_func(self, monkeypatch):
method test_details_no_params (line 295) | async def test_details_no_params(self):
method test_details_by_place_id (line 302) | async def test_details_by_place_id(self):
method test_details_by_osm_id (line 310) | async def test_details_by_osm_id(self):
method test_details_with_debugging (line 320) | async def test_details_with_debugging(self):
method test_details_no_result (line 330) | async def test_details_no_result(self):
class TestReverseEndPoint (line 339) | class TestReverseEndPoint:
method patch_reverse_func (line 342) | def patch_reverse_func(self, monkeypatch):
method test_reverse_no_params (line 354) | async def test_reverse_no_params(self, params):
method test_reverse_success (line 363) | async def test_reverse_success(self):
method test_reverse_from_search (line 371) | async def test_reverse_from_search(self):
class TestLookupEndpoint (line 383) | class TestLookupEndpoint:
method patch_lookup_func (line 386) | def patch_lookup_func(self, monkeypatch):
method test_lookup_no_params (line 397) | async def test_lookup_no_params(self):
method test_lookup_bad_params (line 407) | async def test_lookup_bad_params(self, param):
method test_lookup_bad_osm_type (line 418) | async def test_lookup_bad_osm_type(self, param):
method test_lookup_working (line 428) | async def test_lookup_working(self):
class TestSearchEndPointSearch (line 440) | class TestSearchEndPointSearch:
method patch_lookup_func (line 443) | def patch_lookup_func(self, monkeypatch):
method test_search_free_text (line 454) | async def test_search_free_text(self):
method test_search_free_text_xml (line 463) | async def test_search_free_text_xml(self):
method test_search_free_and_structured (line 474) | async def test_search_free_and_structured(self):
method test_search_dedupe (line 484) | async def test_search_dedupe(self, dedupe, numres):
class TestSearchEndPointSearchAddress (line 496) | class TestSearchEndPointSearchAddress:
method patch_lookup_func (line 499) | def patch_lookup_func(self, monkeypatch):
method test_search_structured (line 510) | async def test_search_structured(self):
class TestSearchEndPointSearchCategory (line 519) | class TestSearchEndPointSearchCategory:
method patch_lookup_func (line 522) | def patch_lookup_func(self, monkeypatch):
method test_search_category (line 533) | async def test_search_category(self):
FILE: test/python/api/test_timeout.py
function test_timeout_none (line 18) | async def test_timeout_none():
function test_timeout_should_not_be_elapsed_after_creation (line 26) | async def test_timeout_should_not_be_elapsed_after_creation():
function test_timeout_elapse (line 31) | async def test_timeout_elapse():
FILE: test/python/api/test_warm.py
function setup_database_with_context (line 16) | def setup_database_with_context(apiobj, table_factory):
function test_warm_all (line 31) | def test_warm_all(tmp_path, args):
FILE: test/python/cli/conftest.py
class MockParamCapture (line 12) | class MockParamCapture:
method __init__ (line 16) | def __init__(self, retval=0):
method __call__ (line 22) | def __call__(self, *args, **kwargs):
class AsyncMockParamCapture (line 29) | class AsyncMockParamCapture:
method __init__ (line 33) | def __init__(self, retval=0):
method __call__ (line 39) | async def __call__(self, *args, **kwargs):
class DummyTokenizer (line 46) | class DummyTokenizer:
method __init__ (line 47) | def __init__(self, *args, **kwargs):
method update_sql_functions (line 53) | def update_sql_functions(self, *args, **kwargs):
method finalize_import (line 56) | def finalize_import(self, *args, **kwargs):
method update_statistics (line 59) | def update_statistics(self, *args, **kwargs):
method update_word_tokens (line 62) | def update_word_tokens(self, *args, **kwargs):
function cli_call (line 67) | def cli_call():
function mock_func_factory (line 78) | def mock_func_factory(monkeypatch):
function async_mock_func_factory (line 89) | def async_mock_func_factory(monkeypatch):
function cli_tokenizer_mock (line 100) | def cli_tokenizer_mock(monkeypatch):
FILE: test/python/cli/test_cli.py
function test_cli_help (line 22) | def test_cli_help(cli_call, capsys):
function test_cli_version (line 31) | def test_cli_version(cli_call, capsys):
class TestCliWithDb (line 40) | class TestCliWithDb:
method setup_cli_call (line 43) | def setup_cli_call(self, cli_call, temp_db, cli_tokenizer_mock, table_...
method test_cli_add_data_file_command (line 50) | def test_cli_add_data_file_command(self, cli_call, mock_func_factory, ...
method test_cli_add_data_object_command (line 57) | def test_cli_add_data_object_command(self, cli_call, mock_func_factory...
method test_cli_add_data_tiger_data (line 63) | def test_cli_add_data_tiger_data(self, cli_call, cli_tokenizer_mock, a...
method test_freeze_command (line 70) | def test_freeze_command(self, mock_func_factory):
method test_index_command (line 84) | def test_index_command(self, monkeypatch, async_mock_func_factory, tab...
method test_special_phrases_wiki_command (line 104) | def test_special_phrases_wiki_command(self, mock_func_factory):
method test_special_phrases_csv_command (line 111) | def test_special_phrases_csv_command(self, src_dir, mock_func_factory):
method test_special_phrases_csv_bad_file (line 120) | def test_special_phrases_csv_bad_file(self, src_dir):
FILE: test/python/cli/test_cmd_admin.py
function test_admin_command_check_database (line 22) | def test_admin_command_check_database(cli_call, mock_func_factory):
function test_admin_migrate (line 29) | def test_admin_migrate(cli_call, mock_func_factory):
function test_admin_clean_deleted_relations (line 36) | def test_admin_clean_deleted_relations(cli_call, mock_func_factory):
function test_admin_clean_deleted_relations_no_age (line 43) | def test_admin_clean_deleted_relations_no_age(cli_call, mock_func_factory):
class TestCliAdminWithDb (line 49) | class TestCliAdminWithDb:
method setup_cli_call (line 52) | def setup_cli_call(self, cli_call, temp_db, cli_tokenizer_mock):
method test_analyse_indexing (line 57) | def test_analyse_indexing(self, mock_func_factory, func, params):
FILE: test/python/cli/test_cmd_api.py
function test_list_format (line 17) | def test_list_format(cli_call, call):
function test_bad_format (line 22) | def test_bad_format(cli_call, call):
class TestCliStatusCall (line 26) | class TestCliStatusCall:
method setup_status_mock (line 29) | def setup_status_mock(self, monkeypatch):
method test_status_simple (line 33) | def test_status_simple(self, cli_call, tmp_path):
method test_status_json_format (line 38) | def test_status_json_format(self, cli_call, tmp_path, capsys):
class TestCliDetailsCall (line 47) | class TestCliDetailsCall:
method setup_status_mock (line 50) | def setup_status_mock(self, monkeypatch):
method test_details_json_format (line 61) | def test_details_json_format(self, cli_call, tmp_path, capsys, params):
class TestCliReverseCall (line 69) | class TestCliReverseCall:
method setup_reverse_mock (line 72) | def setup_reverse_mock(self, monkeypatch):
method test_reverse_simple (line 82) | def test_reverse_simple(self, cli_call, tmp_path, capsys):
method test_reverse_extra_stuff (line 97) | def test_reverse_extra_stuff(self, cli_call, tmp_path, capsys, param, ...
method test_reverse_format (line 106) | def test_reverse_format(self, cli_call, tmp_path, capsys):
class TestCliLookupCall (line 116) | class TestCliLookupCall:
method setup_lookup_mock (line 119) | def setup_lookup_mock(self, monkeypatch):
method test_lookup_simple (line 129) | def test_lookup_simple(self, cli_call, tmp_path, capsys):
function test_search (line 146) | def test_search(cli_call, tmp_path, capsys, monkeypatch, endpoint, params):
FILE: test/python/cli/test_cmd_import.py
class TestCliImportWithDb (line 20) | class TestCliImportWithDb:
method setup_cli_call (line 23) | def setup_cli_call(self, cli_call, temp_db, cli_tokenizer_mock):
method test_import_missing_file (line 27) | def test_import_missing_file(self):
method test_import_bad_file (line 30) | def test_import_bad_file(self):
method test_import_full (line 34) | def test_import_full(self, mock_func_factory, async_mock_func_factory,
method test_import_continue_load_data (line 70) | def test_import_continue_load_data(self, mock_func_factory, async_mock...
method test_import_continue_indexing (line 87) | def test_import_continue_indexing(self, mock_func_factory, async_mock_...
method test_import_continue_postprocess (line 104) | def test_import_continue_postprocess(self, mock_func_factory, async_mo...
FILE: test/python/cli/test_cmd_index.py
class TestCliIndexWithDb (line 15) | class TestCliIndexWithDb:
method setup_cli_call (line 18) | def setup_cli_call(self, cli_call, cli_tokenizer_mock):
method test_index_empty_subset (line 22) | def test_index_empty_subset(self, monkeypatch, async_mock_func_factory...
FILE: test/python/cli/test_cmd_refresh.py
class TestRefresh (line 17) | class TestRefresh:
method setup_cli_call (line 20) | def setup_cli_call(self, cli_call, temp_db, cli_tokenizer_mock):
method test_refresh_command (line 29) | def test_refresh_command(self, mock_func_factory, command, func):
method test_refresh_word_count (line 36) | def test_refresh_word_count(self):
method test_refresh_word_tokens (line 40) | def test_refresh_word_tokens(self):
method test_refresh_postcodes (line 44) | def test_refresh_postcodes(self, async_mock_func_factory, mock_func_fa...
method test_refresh_postcodes_no_place_table (line 53) | def test_refresh_postcodes_no_place_table(self):
method test_refresh_create_functions (line 57) | def test_refresh_create_functions(self, mock_func_factory):
method test_refresh_wikidata_file_not_found (line 64) | def test_refresh_wikidata_file_not_found(self, monkeypatch):
method test_refresh_secondary_importance_file_not_found (line 69) | def test_refresh_secondary_importance_file_not_found(self):
method test_refresh_secondary_importance_new_table (line 72) | def test_refresh_secondary_importance_new_table(self, mock_func_factory):
method test_refresh_importance_computed_after_wiki_import (line 80) | def test_refresh_importance_computed_after_wiki_import(self, monkeypat...
method test_refresh_objects (line 99) | def test_refresh_objects(self, params, mock_func_factory):
method test_refresh_objects_bad_param (line 108) | def test_refresh_objects_bad_param(self, func, param, mock_func_factory):
FILE: test/python/cli/test_cmd_replication.py
function tokenizer_mock (line 23) | def tokenizer_mock(monkeypatch):
function init_status (line 45) | def init_status(temp_db_conn, status_table):
function index_mock (line 50) | def index_mock(async_mock_func_factory, tokenizer_mock, init_status):
function update_mock (line 55) | def update_mock(mock_func_factory, init_status, tokenizer_mock):
class TestCliReplication (line 59) | class TestCliReplication:
method setup_cli_call (line 62) | def setup_cli_call(self, cli_call, temp_db):
method setup_update_function (line 66) | def setup_update_function(self, monkeypatch):
method test_replication_command (line 78) | def test_replication_command(self, mock_func_factory, params, func):
method test_replication_update_bad_interval (line 89) | def test_replication_update_bad_interval(self, monkeypatch):
method test_replication_update_bad_interval_for_geofabrik (line 94) | def test_replication_update_bad_interval_for_geofabrik(self, monkeypat...
method test_replication_update_continuous_no_index (line 100) | def test_replication_update_continuous_no_index(self):
method test_replication_update_once_no_index (line 103) | def test_replication_update_once_no_index(self, update_mock, monkeypat...
method test_replication_update_custom_osm2pgsql (line 109) | def test_replication_update_custom_osm2pgsql(self, monkeypatch, update...
method test_replication_catchup (line 116) | def test_replication_catchup(self, placex_table, monkeypatch, index_mo...
method test_replication_update_custom_threads (line 122) | def test_replication_update_custom_threads(self, update_mock):
method test_replication_update_continuous (line 127) | def test_replication_update_continuous(self, index_mock):
method test_replication_update_continuous_no_change (line 136) | def test_replication_update_continuous_no_change(self, mock_func_factory,
FILE: test/python/config/test_config.py
function make_config (line 18) | def make_config():
function make_config_path (line 28) | def make_config_path(tmp_path):
function test_no_project_dir (line 42) | def test_no_project_dir(make_config):
function test_prefer_project_setting_over_default (line 49) | def test_prefer_project_setting_over_default(make_config, val, tmp_path):
function test_prefer_os_environ_over_project_setting (line 58) | def test_prefer_os_environ_over_project_setting(make_config, monkeypatch...
function test_prefer_os_environ_can_unset_project_setting (line 69) | def test_prefer_os_environ_can_unset_project_setting(make_config, monkey...
function test_get_os_env_add_defaults (line 80) | def test_get_os_env_add_defaults(make_config, monkeypatch):
function test_get_os_env_prefer_os_environ (line 88) | def test_get_os_env_prefer_os_environ(make_config, monkeypatch):
function test_get_libpq_dsn_convert_default (line 96) | def test_get_libpq_dsn_convert_default(make_config):
function test_get_libpq_dsn_convert_php (line 102) | def test_get_libpq_dsn_convert_php(make_config, monkeypatch):
function test_get_libpq_dsn_convert_php_special_chars (line 114) | def test_get_libpq_dsn_convert_php_special_chars(make_config, monkeypatc...
function test_get_libpq_dsn_convert_libpq (line 123) | def test_get_libpq_dsn_convert_libpq(make_config, monkeypatch):
function test_get_bool (line 135) | def test_get_bool(make_config, monkeypatch, value, result):
function test_get_bool_empty (line 143) | def test_get_bool_empty(make_config):
function test_get_int_success (line 152) | def test_get_int_success(make_config, monkeypatch, value, result):
function test_get_int_bad_values (line 161) | def test_get_int_bad_values(make_config, monkeypatch, value):
function test_get_int_empty (line 170) | def test_get_int_empty(make_config):
function test_get_str_list_success (line 182) | def test_get_str_list_success(make_config, monkeypatch, value, outlist):
function test_get_str_list_empty (line 190) | def test_get_str_list_empty(make_config):
function test_get_path_empty (line 196) | def test_get_path_empty(make_config):
function test_get_path_absolute (line 203) | def test_get_path_absolute(make_config, monkeypatch, tmp_path):
function test_get_path_re
Condensed preview — 725 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (6,064K chars).
[
{
"path": ".codespellrc",
"chars": 396,
"preview": "# https://github.com/codespell-project/codespell\n\n[codespell]\nskip = ./man/nominatim.1,data,./docs/styles.css,lib-php,mo"
},
{
"path": ".flake8",
"chars": 273,
"preview": "[flake8]\nmax-line-length = 100\nmax-doc-length = 100\nextend-ignore =\n # something == None constructs are needed for SQ"
},
{
"path": ".github/FUNDING.yml",
"chars": 56,
"preview": "github: lonvia\ncustom: \"https://nominatim.org/funding/\"\n"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 382,
"preview": "contact_links:\n - name: Nominatim Discussions\n url: https://github.com/osm-search/Nominatim/discussions\n about: A"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 773,
"preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n<!-- Before o"
},
{
"path": ".github/ISSUE_TEMPLATE/report-issues-with-search-results.md",
"chars": 1764,
"preview": "---\nname: Report issues with search results\nabout: You have searched something with Nominatim and did not get the expect"
},
{
"path": ".github/ISSUE_TEMPLATE/report-problems-with-the-software.md",
"chars": 1107,
"preview": "---\nname: Report problems with the software\nabout: You have your own installation of Nominatim and found a bug.\ntitle: '"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 784,
"preview": "## Summary\n<!-- Describe the purpose of your pull request and, if present, link to existing issues. -->\n\n## AI usage\n<!-"
},
{
"path": ".github/actions/build-nominatim/action.yml",
"chars": 1505,
"preview": "name: 'Build Nominatim'\n\ninputs:\n dependencies:\n description: 'Where to install dependencies from (pip/apt)'\n "
},
{
"path": ".github/actions/setup-postgresql/action.yml",
"chars": 1779,
"preview": "name: 'Setup Postgresql and Postgis'\n\ndescription: 'Installs PostgreSQL and PostGIS and configures it for CI tests'\n\ninp"
},
{
"path": ".github/actions/setup-postgresql-windows/action.yml",
"chars": 3962,
"preview": "name: 'Setup Postgresql and Postgis on Windows'\n\ndescription: 'Installs PostgreSQL and PostGIS for Windows and configure"
},
{
"path": ".github/workflows/ci-tests.yml",
"chars": 15649,
"preview": "name: CI Tests\n\non: [ push, pull_request ]\n\njobs:\n create-archive:\n runs-on: ubuntu-latest\n\n steps:\n "
},
{
"path": ".gitignore",
"chars": 109,
"preview": "*.log\n*.pyc\n*.swp\n\ndocs/develop/*.png\nsite-html\n\nbuild\ndist\n.coverage\n\n.vagrant\ndata/country_osm_grid.sql.gz\n"
},
{
"path": ".gitmodules",
"chars": 0,
"preview": ""
},
{
"path": ".mypy.ini",
"chars": 183,
"preview": "[mypy]\nplugins = sqlalchemy.ext.mypy.plugin\n\n[mypy-icu.*]\nignore_missing_imports = True\n\n[mypy-asyncpg.*]\nignore_missing"
},
{
"path": "AUTHORS",
"chars": 269,
"preview": "Nominatim was written by:\n\n* Brian Quinion\n* Sarah Hoffmann\n* Marc Tobias Metten\n\n* markigail\n* AntoJvlt\n* gemo1011\n* da"
},
{
"path": "CONTRIBUTING.md",
"chars": 5724,
"preview": "# Nominatim contribution guidelines\n\n## Reporting Bugs\n\nBugs can be reported at https://github.com/openstreetmap/Nominat"
},
{
"path": "COPYING",
"chars": 34509,
"preview": "GNU GENERAL PUBLIC LICENSE\nVersion 3, 29 June 2007\n\nCopyright © 2007 Free Software Foundation, Inc. <https://fsf.org/>\n\n"
},
{
"path": "ChangeLog",
"chars": 31190,
"preview": "5.3.0\n * reorganise postcode and interpolation handling into separate tables\n * add table for handling associatedStreet "
},
{
"path": "LICENSES/Apache-2.0.txt",
"chars": 11358,
"preview": "\n Apache License\n Version 2.0, January 2004\n "
},
{
"path": "LICENSES/GPL-2.0-only.txt",
"chars": 18092,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 2, June 1991\n\n Copyright (C) 1989, 1991 Fr"
},
{
"path": "Makefile",
"chars": 816,
"preview": "all:\n\n# Building of wheels\n\nbuild: clean-build build-db build-api\n\nclean-build:\n\trm -f dist/*\n\nbuild-db:\n\tpython3 -m bui"
},
{
"path": "README.md",
"chars": 3112,
"preview": "[](https://github.com/osm-search/"
},
{
"path": "SECURITY.md",
"chars": 1764,
"preview": "# Security Policy\n\n## Supported Versions\n\nAll Nominatim releases receive security updates for two years.\n\nThe following "
},
{
"path": "VAGRANT.md",
"chars": 4725,
"preview": "# Install Nominatim in a virtual machine for development and testing\n\nThis document describes how you can install Nomina"
},
{
"path": "Vagrantfile",
"chars": 3271,
"preview": "# -*- mode: ruby -*-\n# vi: set ft=ruby :\n\nVagrant.configure(\"2\") do |config|\n # Apache webserver\n config.vm.network \"f"
},
{
"path": "data/words.sql",
"chars": 371338,
"preview": "--\n-- PostgreSQL database dump\n--\n\nSET statement_timeout = 0;\nSET client_encoding = 'UTF8';\nSET standard_conforming_stri"
},
{
"path": "docs/admin/Advanced-Installations.md",
"chars": 5952,
"preview": "# Advanced installations\n\nThis page contains instructions for setting up multiple countries in \nyour Nominatim database."
},
{
"path": "docs/admin/Deployment-Python.md",
"chars": 4403,
"preview": "# Deploying the Nominatim Python frontend\n\nNominatim can be run as a Python-based\n[ASGI web application](https://asgi.re"
},
{
"path": "docs/admin/Faq.md",
"chars": 3944,
"preview": "# Troubleshooting Nominatim Installations\n\n## Installation Issues\n\n### Can a stopped/killed import process be resumed?\n\n"
},
{
"path": "docs/admin/Import.md",
"chars": 12948,
"preview": "# Importing the Database\n\nThe following instructions explain how to create a Nominatim database\nfrom an OSM planet file."
},
{
"path": "docs/admin/Installation.md",
"chars": 5121,
"preview": "# Basic Installation\n\nThis page contains generic installation instructions for Nominatim and its\nprerequisites. There ar"
},
{
"path": "docs/admin/Maintenance.md",
"chars": 3273,
"preview": "This chapter describes the various operations the Nominatim database administrator\nmay use to clean and maintain the dat"
},
{
"path": "docs/admin/Migration.md",
"chars": 17054,
"preview": "# Database Migrations\n\nNominatim offers automatic migrations for versions 4.3+. Please follow\nthe following steps:\n\n* St"
},
{
"path": "docs/admin/Setup-Nominatim-UI.md",
"chars": 5075,
"preview": "# Setting up the Nominatim UI\n\nNominatim is a search API, it does not provide a website interface on its\nown. [nominatim"
},
{
"path": "docs/admin/Update.md",
"chars": 7109,
"preview": "# Updating the Database\n\nThere are many different ways to update your Nominatim database.\nThe following section describe"
},
{
"path": "docs/api/Details.md",
"chars": 5637,
"preview": "# Place details\n\nShow all details about a single place saved in the database.\n\nThis API endpoint is meant for visual ins"
},
{
"path": "docs/api/Faq.md",
"chars": 4716,
"preview": "# Frequently Asked Questions\n\n## API Results\n\n#### 1. The address of my search results contains far-away places that don"
},
{
"path": "docs/api/Lookup.md",
"chars": 8724,
"preview": "# Address lookup\n\nThe lookup API allows to query the address and other details of one or\nmultiple OSM objects like node,"
},
{
"path": "docs/api/Output.md",
"chars": 15325,
"preview": "# Place Output\n\nThe [/reverse](Reverse.md), [/search](Search.md) and [/lookup](Lookup.md)\nAPI calls produce very similar"
},
{
"path": "docs/api/Overview.md",
"chars": 692,
"preview": "This section describes the API V1 of the Nominatim web service. The\nservice offers the following endpoints:\n\n * __[/sear"
},
{
"path": "docs/api/Reverse.md",
"chars": 11922,
"preview": "# Reverse Geocoding\n\nReverse geocoding generates an address from a coordinate given as\nlatitude and longitude.\n\n## How i"
},
{
"path": "docs/api/Search.md",
"chars": 19828,
"preview": "# Search queries\n\nThe search API allows you to look up a location from a textual description\nor address. Nominatim suppo"
},
{
"path": "docs/api/Status.md",
"chars": 1653,
"preview": "# Status\n\nReport on the state of the service and database. Useful for checking if the\nservice is up and running. The JSO"
},
{
"path": "docs/customize/Country-Settings.md",
"chars": 5972,
"preview": "# Customizing Per-Country Data\n\nWhenever an OSM is imported into Nominatim, the object is first assigned\na country. Nomi"
},
{
"path": "docs/customize/Import-Styles.md",
"chars": 26921,
"preview": "# Configuring the Import of OSM data\n\nIn the very first step of a Nominatim import, OSM data is loaded into the\ndatabase"
},
{
"path": "docs/customize/Importance.md",
"chars": 2492,
"preview": "## Importance\n\nSearch requests can yield multiple results which match equally well with\nthe original query. In such case"
},
{
"path": "docs/customize/Overview.md",
"chars": 1185,
"preview": "Nominatim comes with a predefined set of configuration options that should\nwork for most standard installations. If you "
},
{
"path": "docs/customize/Postcodes.md",
"chars": 1761,
"preview": "# External postcode data\n\nNominatim creates a table of known postcode centroids during import. This table\nis used for se"
},
{
"path": "docs/customize/Ranking.md",
"chars": 5073,
"preview": "# Place Ranking in Nominatim\n\nNominatim uses two metrics to rank a place: search rank and address rank.\nThis chapter exp"
},
{
"path": "docs/customize/Result-Formatting.md",
"chars": 9313,
"preview": "# Changing the Appearance of Results in the Server API\n\nThe Nominatim Server API offers a number of formatting options t"
},
{
"path": "docs/customize/SQLite.md",
"chars": 1947,
"preview": "A Nominatim database can be converted into an SQLite database and used as\na read-only source for geocoding queries. This"
},
{
"path": "docs/customize/Settings.md",
"chars": 27211,
"preview": "This section provides a reference of all configuration parameters that can\nbe used with Nominatim.\n\n# Configuring Nomina"
},
{
"path": "docs/customize/Special-Phrases.md",
"chars": 1797,
"preview": "# Special phrases\n\n## Importing OSM user-maintained special phrases\n\nAs described in the [Import section](../admin/Impor"
},
{
"path": "docs/customize/Tiger.md",
"chars": 996,
"preview": "# Installing TIGER housenumber data for the US\n\nNominatim is able to use the official [TIGER](https://www.census.gov/geo"
},
{
"path": "docs/customize/Tokenizers.md",
"chars": 14574,
"preview": "# Tokenizers\n\nThe tokenizer module in Nominatim is responsible for analysing the names given\nto OSM objects and the term"
},
{
"path": "docs/develop/Database-Layout.md",
"chars": 10434,
"preview": "# Database Layout\n\n### Import tables\n\nOSM data is initially imported using [osm2pgsql](https://osm2pgsql.org).\nNominatim"
},
{
"path": "docs/develop/Development-Environment.md",
"chars": 5116,
"preview": "# Setting up Nominatim for Development\n\nThis chapter gives an overview how to set up Nominatim for development\nand how t"
},
{
"path": "docs/develop/ICU-Tokenizer-Modules.md",
"chars": 10496,
"preview": "# Writing custom sanitizer and token analysis modules for the ICU tokenizer\n\nThe [ICU tokenizer](../customize/Tokenizers"
},
{
"path": "docs/develop/Indexing.md",
"chars": 7053,
"preview": "# Indexing Places\n\nIn Nominatim, the word __indexing__ refers to the process that takes the raw\nOpenStreetMap data from "
},
{
"path": "docs/develop/Testing.md",
"chars": 5074,
"preview": "# Nominatim Test Suite\n\nThis chapter describes the tests in the `/test` directory, how they are\nstructured and how to ex"
},
{
"path": "docs/develop/Tokenizers.md",
"chars": 12351,
"preview": "# Tokenizers\n\nThe tokenizer is the component of Nominatim that is responsible for\nanalysing names of OSM objects and que"
},
{
"path": "docs/develop/address-tables.plantuml",
"chars": 671,
"preview": "@startuml\nskinparam monochrome true\nskinparam ObjectFontStyle bold\n\nmap search_name_X {\n place_id => BIGINT\n address_r"
},
{
"path": "docs/develop/data-sources.md",
"chars": 1170,
"preview": "# Additional Data Sources\n\nThis guide explains how data sources other than OpenStreetMap mentioned in\nthe install instru"
},
{
"path": "docs/develop/osm2pgsql-tables.plantuml",
"chars": 1145,
"preview": "@startuml\nskinparam monochrome true\nskinparam ObjectFontStyle bold\n\nmap planet_osm_nodes #eee {\n id => BIGINT\n lat => "
},
{
"path": "docs/develop/overview.md",
"chars": 1281,
"preview": "# Basic Architecture\n\nNominatim provides geocoding based on OpenStreetMap data. It uses a PostgreSQL\ndatabase as a backe"
},
{
"path": "docs/develop/parenting-flow.plantuml",
"chars": 585,
"preview": "@startuml\nskinparam monochrome true\n\nstart\n\nif (has 'addr:street'?) then (yes)\n if (street with that name\\n nearby?) th"
},
{
"path": "docs/develop/search-tables.plantuml",
"chars": 2177,
"preview": "@startuml\nskinparam monochrome true\nskinparam ObjectFontStyle bold\n\nleft to right direction\n\nmap placex {\n place_id => "
},
{
"path": "docs/extra.css",
"chars": 580,
"preview": ".toctree-l3 {\n display: none!important\n}\n\n.md-content {\n max-width: 800px\n}\n\ntable {\n margin-bottom: 12pt\n}\n\nth"
},
{
"path": "docs/index.md",
"chars": 810,
"preview": "Nominatim (from the Latin, 'by name') is a tool to search OSM data by name and\naddress and to generate synthetic address"
},
{
"path": "docs/library/Configuration.md",
"chars": 1341,
"preview": "# Configuration\n\nWhen using Nominatim through the library, it can be configured in exactly\nthe same way as when running "
},
{
"path": "docs/library/Getting-Started.md",
"chars": 10793,
"preview": "# Getting Started\n\nThe Nominatim search frontend is implemented as a Python library and can as\nsuch directly be used in "
},
{
"path": "docs/library/Input-Parameter-Types.md",
"chars": 1298,
"preview": "# Input Parameter Types\n\nThis page describes in more detail some of the input parameter types used\nin the query function"
},
{
"path": "docs/library/Low-Level-DB-Access.md",
"chars": 1838,
"preview": "# Low-level connections\n\nThe `NominatimAPIAsync` class allows to directly access the underlying\ndatabase connection to e"
},
{
"path": "docs/library/NominatimAPI.md",
"chars": 845,
"preview": "# The Nominatim API classes\n\nThe API classes are the core object of the search library. Always instantiate\none of these "
},
{
"path": "docs/library/Result-Handling.md",
"chars": 2191,
"preview": "# Result handling\n\nThe search functions of the Nominatim API always return a result object\nwith the raw information abou"
},
{
"path": "docs/mk_install_instructions.py",
"chars": 1128,
"preview": "# SPDX-License-Identifier: GPL-3.0-or-later\n#\n# This file is part of Nominatim. (https://nominatim.org)\n#\n# Copyright (C"
},
{
"path": "docs/styles.css",
"chars": 4471,
"preview": ".codehilite .hll { background-color: #ffffcc }\n.codehilite { background: #f0f0f0; }\n.codehilite .c { color: #60a0b0; fo"
},
{
"path": "lib-lua/flex-base.lua",
"chars": 419,
"preview": "-- This is just an alias for the Nominatim themepark theme module\nlocal flex = require('themes/nominatim/init')\n\nfunctio"
},
{
"path": "lib-lua/import-address.lua",
"chars": 142,
"preview": "-- This is just an alias for the Nominatim themepark address topic\nlocal flex = require('flex-base')\n\nflex.load_topic('a"
},
{
"path": "lib-lua/import-admin.lua",
"chars": 138,
"preview": "-- This is just an alias for the Nominatim themepark admin topic\nlocal flex = require('flex-base')\n\nflex.load_topic('adm"
},
{
"path": "lib-lua/import-extratags.lua",
"chars": 161,
"preview": "-- This is just an alias for the Nominatim themepark full topic\nlocal flex = require('flex-base')\n\nflex.load_topic('full"
},
{
"path": "lib-lua/import-full.lua",
"chars": 136,
"preview": "-- This is just an alias for the Nominatim themepark full topic\nlocal flex = require('flex-base')\n\nflex.load_topic('full"
},
{
"path": "lib-lua/import-street.lua",
"chars": 140,
"preview": "-- This is just an alias for the Nominatim themepark street topic\nlocal flex = require('flex-base')\n\nflex.load_topic('st"
},
{
"path": "lib-lua/taginfo.lua",
"chars": 4276,
"preview": "-- Prints taginfo project description in the standard output\n--\n\n-- create fake \"osm2pgsql\" table for flex-base, origina"
},
{
"path": "lib-lua/themes/nominatim/init.lua",
"chars": 33944,
"preview": "-- Nominatim themepark theme.\n--\n-- The Nominatim theme creates a fixed set of import tables for use with\n-- Nominatim. "
},
{
"path": "lib-lua/themes/nominatim/presets.lua",
"chars": 12864,
"preview": "-- Defines defaults used in the topic definitions.\n\nlocal module = {}\n\n-- Helper functions\n\nlocal function group_merge(g"
},
{
"path": "lib-lua/themes/nominatim/topics/address.lua",
"chars": 565,
"preview": "local _, flex, cfg = ...\n\nflex.set_main_tags('admin')\nflex.modify_main_tags('street/' .. (cfg.street_theme or 'default')"
},
{
"path": "lib-lua/themes/nominatim/topics/admin.lua",
"chars": 404,
"preview": "local _, flex, cfg = ...\n\nflex.set_main_tags('admin')\n\nflex.set_name_tags('core')\n\nflex.set_address_tags('core')\nflex.se"
},
{
"path": "lib-lua/themes/nominatim/topics/full.lua",
"chars": 743,
"preview": "local _, flex, cfg = ...\n\nlocal group\nif cfg.with_extratags then\n group = 'extra'\nelse\n group = 'delete'\nend\n\nflex"
},
{
"path": "lib-lua/themes/nominatim/topics/street.lua",
"chars": 531,
"preview": "local _, flex, cfg = ...\n\nflex.set_main_tags('admin')\nflex.modify_main_tags('street/' .. (cfg.street_theme or 'default')"
},
{
"path": "lib-sql/functions/associated_street_triggers.sql",
"chars": 1077,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/functions/importance.sql",
"chars": 7224,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/functions/interpolation.sql",
"chars": 12794,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/functions/partition-functions.sql",
"chars": 10807,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/functions/place_triggers.sql",
"chars": 10471,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/functions/placex_triggers.sql",
"chars": 53970,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/functions/postcode_triggers.sql",
"chars": 3760,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/functions/ranking.sql",
"chars": 8053,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/functions/updates.sql",
"chars": 2751,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/functions/utils.sql",
"chars": 20374,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/functions.sql",
"chars": 820,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/grants.sql",
"chars": 1648,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/indices.sql",
"chars": 4385,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/partition-tables.src.sql",
"chars": 2189,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/postcode_tables.sql",
"chars": 625,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/table-triggers.sql",
"chars": 2208,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/tables/addressline.sql",
"chars": 636,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/tables/entrance.sql",
"chars": 613,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/tables/import_reports.sql",
"chars": 921,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/tables/importance_tables.sql",
"chars": 544,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/tables/interpolation.sql",
"chars": 1231,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/tables/location_area.sql",
"chars": 1027,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/tables/nominatim_properties.sql",
"chars": 339,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/tables/placex.sql",
"chars": 3563,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/tables/postcodes.sql",
"chars": 1271,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/tables/search_name.sql",
"chars": 714,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/tables/status.sql",
"chars": 577,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/tables/tiger.sql",
"chars": 519,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/tables.sql",
"chars": 768,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/tiger_import_finish.sql",
"chars": 1279,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/tiger_import_start.sql",
"chars": 6289,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "lib-sql/tokenizer/icu_tokenizer.sql",
"chars": 8621,
"preview": "-- SPDX-License-Identifier: GPL-2.0-only\n--\n-- This file is part of Nominatim. (https://nominatim.org)\n--\n-- Copyright ("
},
{
"path": "man/create-manpage.py",
"chars": 233,
"preview": "import sys\nimport os\nfrom pathlib import Path\n\nsys.path.append(str(Path(__file__, '..', '..', 'src').resolve()))\n\nfrom n"
},
{
"path": "man/nominatim.1",
"chars": 30055,
"preview": ".TH nominatim \"1\" Manual\n.SH NAME\nnominatim\n.SH SYNOPSIS\n.B nominatim\n[-h] [--version] {import,freeze,replication,specia"
},
{
"path": "mkdocs.yml",
"chars": 3538,
"preview": "site_name: Nominatim Manual\ntheme:\n font: false\n name: material\n features:\n - navigation.tabs\n - toc.integrate\n"
},
{
"path": "munin/nominatim_importlag",
"chars": 1199,
"preview": "#!/bin/sh\n#\n# Plugin to monitor the age of the imported data in the rendering db\n#\n# Can be configured through libpq env"
},
{
"path": "munin/nominatim_query_speed",
"chars": 3572,
"preview": "#!/usr/bin/perl -w\n# Plugin to monitor response time of search queries.\n#\n# Based on a plugin by Dalibo <cedric.villemai"
},
{
"path": "munin/nominatim_requests",
"chars": 1389,
"preview": "#!/bin/sh\n#\n# Plugin to monitor the types of requests made to the API\n#\n# Can be configured through libpq environment va"
},
{
"path": "nominatim-cli.py",
"chars": 473,
"preview": "#!/usr/bin/env python3\n# SPDX-License-Identifier: GPL-3.0-or-later\n#\n# This file is part of Nominatim. (https://nominati"
},
{
"path": "packaging/nominatim-api/COPYING",
"chars": 34509,
"preview": "GNU GENERAL PUBLIC LICENSE\nVersion 3, 29 June 2007\n\nCopyright © 2007 Free Software Foundation, Inc. <https://fsf.org/>\n\n"
},
{
"path": "packaging/nominatim-api/README.md",
"chars": 1151,
"preview": "# Nominatim - Frontend Library\n\nNominatim is a tool to search OpenStreetMap data\nby name and address (geocoding) and to "
},
{
"path": "packaging/nominatim-api/extra_src/paths.py",
"chars": 419,
"preview": "# SPDX-License-Identifier: GPL-3.0-or-later\n#\n# This file is part of Nominatim. (https://nominatim.org)\n#\n# Copyright (C"
},
{
"path": "packaging/nominatim-api/pyproject.toml",
"chars": 1638,
"preview": "[project]\nname = \"nominatim-api\"\ndescription = \"A tool for building a database of OpenStreetMap for geocoding and for se"
},
{
"path": "packaging/nominatim-db/COPYING",
"chars": 34509,
"preview": "GNU GENERAL PUBLIC LICENSE\nVersion 3, 29 June 2007\n\nCopyright © 2007 Free Software Foundation, Inc. <https://fsf.org/>\n\n"
},
{
"path": "packaging/nominatim-db/README.md",
"chars": 1499,
"preview": "# Nominatim - DB Backend\n\nNominatim is a tool to search OpenStreetMap data\nby name and address (geocoding) and to genera"
},
{
"path": "packaging/nominatim-db/extra_src/nominatim_db/paths.py",
"chars": 461,
"preview": "# SPDX-License-Identifier: GPL-3.0-or-later\n#\n# This file is part of Nominatim. (https://nominatim.org)\n#\n# Copyright (C"
},
{
"path": "packaging/nominatim-db/pyproject.toml",
"chars": 2007,
"preview": "[project]\nname = \"nominatim-db\"\ndescription = \"A tool for building a database of OpenStreetMap for geocoding and for sea"
},
{
"path": "packaging/nominatim-db/scripts/nominatim",
"chars": 63,
"preview": "#!python3\n\nfrom nominatim_db import cli\n\nexit(cli.nominatim())\n"
},
{
"path": "settings/address-levels.json",
"chars": 6510,
"preview": "[\n{ \"tags\" : {\n \"place\" : {\n \"sea\" : [2, 0],\n \"island\" : [17, 0],\n \"islet\" : [20, 0],\n "
},
{
"path": "settings/country-names/ad.yaml",
"chars": 2484,
"preview": "name: \n default: Andorra\n ab: Андора\n af: Andorra\n ak: Andora\n am: አንዶራ\n an: Andorra\n ar: أندورا\n "
},
{
"path": "settings/country-names/ae.yaml",
"chars": 3969,
"preview": "name: \n default: الإمارات العربية المتحدة\n af: Verenigde Arabiese Emirate\n am: የተባበሩት የዓረብ ግዛቶች\n an: Emirato"
},
{
"path": "settings/country-names/af.yaml",
"chars": 3068,
"preview": "name: \n default: افغانستان\n af: Afghanistan\n ak: Afganistan\n am: አፍጋኒስታን\n an: Afganistán\n ar: أفغانستا"
},
{
"path": "settings/country-names/ag.yaml",
"chars": 3793,
"preview": "name: \n default: Antigua and Barbuda\n af: Antigua en Barbuda\n ak: Antigua ne Baabuda\n am: አንቲጋ እና ባርቡዳ\n a"
},
{
"path": "settings/country-names/ai.yaml",
"chars": 1315,
"preview": "name: \n default: Anguilla\n af: Anguilla\n an: Anguila\n ar: أنجويلا\n az: Angilya\n ba: Ангилья\n be: Ан"
},
{
"path": "settings/country-names/al.yaml",
"chars": 2761,
"preview": "name: \n default: Shqipëria\n ab: Арнауыҭтәыла\n af: Albanië\n ak: Albania\n am: አልባኒያ\n an: Albania\n ar:"
},
{
"path": "settings/country-names/am.yaml",
"chars": 2715,
"preview": "name: \n default: Հայաստան\n ab: Ермантәыла\n af: Armenië\n ak: Armenia\n am: አርመኒያ\n an: Armenia\n ar: أر"
},
{
"path": "settings/country-names/ao.yaml",
"chars": 2284,
"preview": "name: \n default: Angola\n af: Angola\n am: አንጎላ\n an: Angola\n ar: أنغولا\n az: Anqola\n ba: Анго́ла\n "
},
{
"path": "settings/country-names/ar.yaml",
"chars": 2934,
"preview": "name: \n default: Argentina\n af: Argentinië\n ak: Agyɛntina\n am: አርጀንቲና\n an: Archentina\n ar: الأرجنتين\n "
},
{
"path": "settings/country-names/at.yaml",
"chars": 2619,
"preview": "name: \n default: Österreich\n ab: Австриа\n af: Oostenryk\n ak: Austria\n am: ኦስትሪያ\n an: Austria\n ar: ا"
},
{
"path": "settings/country-names/au.yaml",
"chars": 2836,
"preview": "name: \n default: Australia\n ab: Австралиа\n af: Australië\n am: አውስትራልያ\n an: Australia\n ar: أستراليا\n "
},
{
"path": "settings/country-names/az.yaml",
"chars": 3130,
"preview": "name: \n default: Azərbaycan\n ab: Азербаиџьан\n af: Azerbeidjan\n ak: Azerbaijan\n am: አዘርባይጃን\n an: Azerba"
},
{
"path": "settings/country-names/ba.yaml",
"chars": 4525,
"preview": "name: \n default: Bosna i Hercegovina / Босна и Херцеговина\n af: Bosnië en Herzegowina\n ak: Bosnia and Herzegovi"
},
{
"path": "settings/country-names/bb.yaml",
"chars": 2129,
"preview": "name: \n default: Barbados\n af: Barbados\n am: ባርቤዶስ\n an: Barbados\n ar: باربادوس\n ay: Barbados\n az: B"
},
{
"path": "settings/country-names/bd.yaml",
"chars": 762,
"preview": "name: \n default: Bangladesh\n af: Bangladesj\n ar: بنغلاديش\n az: Banqladeş\n be: Бангладэш\n br: Banglades"
},
{
"path": "settings/country-names/be.yaml",
"chars": 2539,
"preview": "name: \n default: België / Belgique / Belgien\n af: België\n ak: Belgium\n am: ቤልጅግ\n an: Belchica\n ar: بلج"
},
{
"path": "settings/country-names/bf.yaml",
"chars": 3089,
"preview": "name: \n default: Burkina Faso\n af: Burkina Faso\n ak: Burkina Faso\n am: ቡርኪና ፋሶ\n an: Burkina Faso\n ar: "
},
{
"path": "settings/country-names/bg.yaml",
"chars": 2672,
"preview": "name: \n default: Бългaрия\n ab: Болга́риа\n af: Bulgarye\n ak: Bulgaria\n am: ቡልጋሪያ\n an: Bulgaria\n ar: "
},
{
"path": "settings/country-names/bh.yaml",
"chars": 2356,
"preview": "name: \n default: البحرين\n af: Bahrein\n ak: Baren\n am: ባሕሬን\n an: Bahrein\n ar: البحرين\n as: বাহৰেইন\n "
},
{
"path": "settings/country-names/bi.yaml",
"chars": 2375,
"preview": "name: \n default: Burundi\n af: Burundi\n am: ቡሩንዲ\n an: Burundi\n ar: بوروندي\n az: Burundi\n ba: Буру́нд"
},
{
"path": "settings/country-names/bj.yaml",
"chars": 2115,
"preview": "name: \n default: Bénin\n af: Benin\n ak: Bɛnin\n am: ቤኒን\n an: Benín\n ar: بنين\n az: Benin\n ba: Бенин"
},
{
"path": "settings/country-names/bm.yaml",
"chars": 695,
"preview": "name: \n default: Bermuda\n ar: برمودا\n be: Бярмуды\n br: Bermudez\n ca: Bermudes\n cs: Bermudy\n da: Ber"
},
{
"path": "settings/country-names/bn.yaml",
"chars": 2244,
"preview": "name: \n default: Brunei\n af: Broenei\n ak: Brunae\n am: ብሩናይ\n an: Brunei\n ar: بروناي\n as: ব্ৰুণেই\n "
},
{
"path": "settings/country-names/bo.yaml",
"chars": 2505,
"preview": "name: \n default: Bolivia\n ab: Боли́виа\n af: Bolivië\n am: ቦሊቪያ\n an: Bolivia\n ar: بوليفيا\n ay: Wuliwy"
},
{
"path": "settings/country-names/br.yaml",
"chars": 2608,
"preview": "name: \n default: Brasil\n af: Brasilië\n ak: Brazil\n am: ብራዚል\n an: Brasil\n ar: البَرَازِيل\n as: ব্ৰাজ"
},
{
"path": "settings/country-names/bs.yaml",
"chars": 2444,
"preview": "name: \n default: The Bahamas\n af: Bahamas\n ak: Bahama\n am: ባሃማስ\n an: Bahamas\n ar: جزر باهاماس\n ay: "
},
{
"path": "settings/country-names/bt.yaml",
"chars": 2208,
"preview": "name: \n default: འབྲུག་ཡུལ་\n ab: Бутан\n af: Bhoetan\n ak: Butan\n am: ቡታን\n an: Bután\n ar: بوتان\n a"
},
{
"path": "settings/country-names/bw.yaml",
"chars": 2603,
"preview": "name: \n default: Botswana\n af: Botswana\n ak: Bɔtswana\n am: ቦትስዋና\n an: Botswana\n ar: بوتسوانا\n az: B"
},
{
"path": "settings/country-names/by.yaml",
"chars": 2364,
"preview": "name: \n default: Беларусь\n af: Wit-Rusland\n am: ቤላሩስ\n an: Belarrusia\n ar: روسيا البيضاء\n az: Belarus\n "
},
{
"path": "settings/country-names/bz.yaml",
"chars": 2065,
"preview": "name: \n default: Belize\n af: Belize\n ak: Beliz\n am: ቤሊዝ\n an: Belize\n ar: بليز\n ay: Wilisi\n az: B"
},
{
"path": "settings/country-names/ca.yaml",
"chars": 2261,
"preview": "name: \n default: Canada\n ab: Канада\n af: Kanada\n am: ካናዳ\n an: Canadá\n ar: كندا\n as: কানাডা\n av: "
},
{
"path": "settings/country-names/cd.yaml",
"chars": 4500,
"preview": "name: \n default: République démocratique du Congo\n af: Demokratiese Republiek van die Kongo\n am: ኮንጎ ዲሞክራሲያዊ ሪፐ"
},
{
"path": "settings/country-names/cf.yaml",
"chars": 4115,
"preview": "name: \n default: Ködörösêse tî Bêafrîka - République Centrafricaine\n af: Sentraal-Afrikaanse Republiek\n am: የመካ"
},
{
"path": "settings/country-names/cg.yaml",
"chars": 2968,
"preview": "name: \n default: Congo\n af: Republiek van die Kongo\n am: ኮንጎ ሪፐብሊክ\n an: Republica d'o Congo\n ar: جمهورية "
},
{
"path": "settings/country-names/ch.yaml",
"chars": 2338,
"preview": "name: \n default: Schweiz/Suisse/Svizzera/Svizra\n af: Switserland\n am: ስዊዘርላንድ\n an: Suiza\n ar: سويسرا\n "
},
{
"path": "settings/country-names/ci.yaml",
"chars": 2913,
"preview": "name: \n default: Côte d’Ivoire\n af: Ivoorkus\n am: ኮት ዲቯር\n an: Costa de Vori\n ar: ساحل العاج\n az: Fil D"
},
{
"path": "settings/country-names/ck.yaml",
"chars": 2655,
"preview": "name: \n default: Kūki 'Āirani\n af: Cookeilande\n ak: Kook Nsupɔw\n am: ኩክ ደሴቶች\n an: islas Cook\n ar: جزر "
},
{
"path": "settings/country-names/cl.yaml",
"chars": 2342,
"preview": "name: \n default: Chile\n ab: Чили\n af: Chili\n ak: Chile\n am: ቺሌ\n an: Chile\n ar: تشيلي\n as: চিলি\n "
},
{
"path": "settings/country-names/cm.yaml",
"chars": 2156,
"preview": "name: \n default: Cameroun\n af: Kameroen\n am: ካሜሩን\n an: Camerún\n ar: الكاميرون\n az: Kamerun\n ba: Кам"
},
{
"path": "settings/country-names/cn.yaml",
"chars": 2393,
"preview": "name: \n default: 中国\n ab: Чынҭ\n af: China\n ak: China\n am: የቻይና\n an: China\n ar: الصين\n as: চীন\n "
},
{
"path": "settings/country-names/co.yaml",
"chars": 2240,
"preview": "name: \n default: Colombia\n af: Colombia\n am: ኮሎምቢያ\n an: Colombia\n ar: كولومبيا\n ay: Kuluwya\n az: Ko"
},
{
"path": "settings/country-names/cr.yaml",
"chars": 2496,
"preview": "name: \n default: Costa Rica\n ab: Коста-Рика\n af: Costa Rica\n am: ኮስታ ሪካ\n an: Costa Rica\n ar: كوستاريكا"
},
{
"path": "settings/country-names/cu.yaml",
"chars": 1699,
"preview": "name: \n default: Cuba\n af: Kuba\n am: ኩባ\n an: Cuba\n ar: كوبا\n ay: Kuba\n az: Kuba\n ba: Куба\n be"
},
{
"path": "settings/country-names/cv.yaml",
"chars": 1083,
"preview": "name: \n default: Cabo Verde\n af: Kaap Verde\n ar: الرأس الأخضر\n be: Каба-Вердэ\n br: Kab Glas\n ca: Cap V"
},
{
"path": "settings/country-names/cy.yaml",
"chars": 1918,
"preview": "name: \n default: Κύπρος - Kıbrıs\n af: Siprus\n am: ቆጵሮስ\n an: Chipre\n ar: قبرص\n az: Kipr\n be: Кіпр\n "
},
{
"path": "settings/country-names/cz.yaml",
"chars": 2767,
"preview": "name: \n default: Česko\n ab: Чехиа\n af: Tsjeggië\n am: ቼክ ሪፐብሊክ\n an: Republica Checa\n ar: التشيك\n av:"
},
{
"path": "settings/country-names/de.yaml",
"chars": 2636,
"preview": "name: \n default: Deutschland\n ab: Алмантәыла\n af: Duitsland\n ak: Germany\n am: ጀርመን\n an: Alemanya\n a"
},
{
"path": "settings/country-names/dj.yaml",
"chars": 2039,
"preview": "name: \n default: Djibouti جيبوتي\n af: Djiboeti\n am: ጅቡቲ\n an: Chibuti\n ar: جيبوتي\n az: Cibuti\n ba: Д"
},
{
"path": "settings/country-names/dk.yaml",
"chars": 2210,
"preview": "name: \n default: Danmark\n af: Denemarke\n am: ዴንማርክ\n an: Dinamarca\n ar: الدنمارك\n az: Danimarka\n ba:"
},
{
"path": "settings/country-names/dm.yaml",
"chars": 752,
"preview": "name: \n default: Dominica\n af: Dominika\n ar: دومينيكا\n be: Дамініка\n br: Republik Dominikan\n cs: Domin"
},
{
"path": "settings/country-names/do.yaml",
"chars": 3296,
"preview": "name: \n default: República Dominicana\n af: Dominikaanse Republiek\n am: ዶሚኒካን ሪፐብሊክ\n an: Republica Dominicana"
},
{
"path": "settings/country-names/dz.yaml",
"chars": 2627,
"preview": "name: \n default: Algérie / ⵍⵣⵣⴰⵢⴻⵔ / الجزائر\n af: Algerië\n ak: Algeria\n am: አልጄሪያ\n an: Alcheria\n ar: ا"
},
{
"path": "settings/country-names/ec.yaml",
"chars": 2041,
"preview": "name: \n default: Ecuador\n am: ኤኳዶር\n an: Ecuador\n ar: الإكوادور\n ay: Ikwadur\n az: Ekvador\n ba: Эквад"
},
{
"path": "settings/country-names/ee.yaml",
"chars": 2233,
"preview": "name: \n default: Eesti\n af: Estland\n am: ኤስቶኒያ\n an: Estonia\n ar: إستونيا\n az: Estoniya\n ba: Эстония"
},
{
"path": "settings/country-names/eg.yaml",
"chars": 2396,
"preview": "name: \n default: مصر\n ab: Мы́сры\n af: Egipte\n ak: Igyipt\n am: ግብፅ\n an: Echipto\n ar: مصر\n as: ইজি"
},
{
"path": "settings/country-names/eh.yaml",
"chars": 871,
"preview": "name: \n default: الجمهورية العربية الصحراوية الديمقراطية\n ar: الجمهورية العربية الصحراوية الديمقراطية\n cs: Saha"
},
{
"path": "settings/country-names/er.yaml",
"chars": 2135,
"preview": "name: \n default: ኤርትራ Eritrea إرتريا\n af: Eritrea\n am: ኤርትራ\n an: Eritrea\n ar: إرتريا\n az: Eritreya\n "
},
{
"path": "settings/country-names/es.yaml",
"chars": 2322,
"preview": "name: \n default: España\n af: Spanje\n am: እስፓንያ\n an: Espanya\n ar: إسبانيا\n ay: Ispaña\n az: İspaniya\n"
},
{
"path": "settings/country-names/et.yaml",
"chars": 2589,
"preview": "name: \n default: ኢትዮጵያ\n af: Ethiopië\n ak: Ithiopia\n am: ኢትዮጵያ\n an: Etiopia\n ar: إثيوبيا\n av: Хабаши"
},
{
"path": "settings/country-names/fi.yaml",
"chars": 2446,
"preview": "name: \n default: Suomi\n ab: Суоми\n af: Finland\n am: ፊንላንድ\n an: Finlandia\n ar: فنلندا\n ay: Phini suy"
}
]
// ... and 525 more files (download for full content)
About this extraction
This page contains the full source code of the twain47/Nominatim GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 725 files (5.4 MB), approximately 1.5M tokens, and a symbol index with 2762 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.