{"id":19356225,"url":"https://github.com/blackboxlogic/osmtagstranslator","last_synced_at":"2025-07-26T11:08:36.621Z","repository":{"id":98847082,"uuid":"271308651","full_name":"blackboxlogic/OsmTagsTranslator","owner":"blackboxlogic","description":"Do you need to convert third party data into OpenStreetMap tags, but your object oriented language is clunky? This tool lets you express OSM tag transformations as SQLite queries.","archived":false,"fork":false,"pushed_at":"2024-02-15T17:21:58.000Z","size":1151,"stargazers_count":5,"open_issues_count":5,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-02T14:11:12.615Z","etag":null,"topics":["openstreetmap","openstreetmap-data","openstreetmap-tags"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/blackboxlogic.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2020-06-10T15:06:14.000Z","updated_at":"2024-02-15T16:40:23.000Z","dependencies_parsed_at":"2023-05-07T02:04:42.355Z","dependency_job_id":null,"html_url":"https://github.com/blackboxlogic/OsmTagsTranslator","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blackboxlogic%2FOsmTagsTranslator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blackboxlogic%2FOsmTagsTranslator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blackboxlogic%2FOsmTagsTranslator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blackboxlogic%2FOsmTagsTranslator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/blackboxlogic","download_url":"https://codeload.github.com/blackboxlogic/OsmTagsTranslator/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250416685,"owners_count":21427030,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["openstreetmap","openstreetmap-data","openstreetmap-tags"],"created_at":"2024-11-10T07:03:30.695Z","updated_at":"2025-04-23T10:32:28.696Z","avatar_url":"https://github.com/blackboxlogic.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OsmTagsTranslator\n## Do you need to convert third party data into OpenStreetMap tags, but your object oriented language is clunky? This tool lets you express OSM tag transformations as SQLite queries.\n\n[This file](https://github.com/blackboxlogic/OsmTagsTranslator/blob/master/OsmTagsTranslator.Tests/SampleE911Addresses.osm) has the address fields from Maine's department of transportation. These tags are not suitable for OSM :unamused:\n```xml\n\u003c?xml version='1.0' encoding='UTF-8'?\u003e\n\u003cosm version='0.6'\u003e\n  \u003cnode id='-101753' lat='43.73086183589' lon='-70.33776262438'\u003e\n    \u003ctag k='ADDRESS_NUMBER' v='18' /\u003e\n    \u003ctag k='UNIT' v='' /\u003e\n    \u003ctag k='PREDIR' v='E' /\u003e\n    \u003ctag k='STREETNAME' v='Lillian' /\u003e\n    \u003ctag k='SUFFIX' v='Pl' /\u003e\n    \u003ctag k='POSTDIR' v='' /\u003e\n    \u003ctag k='POSTAL_COMMUNITY' v='Westbrook' /\u003e\n    \u003ctag k='STATE' v='ME' /\u003e\n    \u003ctag k='ZIPCODE' v='04092' /\u003e\n    \u003ctag k='PLACE_TYPE' v='fire station' /\u003e\n\t...\n  \u003c/node\u003e\n\t...\n\u003c/osm\u003e\n```\n\nEach tag needs some work. For example, `addr:street=East Lillian Place` must be composed from { `PREDIR=E`, `STREETNAME=Lillian`, `SUFFIX=Pl`}. We can express these transformations using a [SQLite query](https://github.com/blackboxlogic/OsmTagsTranslator/blob/master/OsmTagsTranslator/Queries/E911AddressesToOsmSchema.sql) :open_mouth:\n```sql\nSELECT\n\t\t-- These first two columns are required to identify elements\n\t\txid,\n\t\txtype,\n\t\t-- Every other column becomes a tag\n\t\tADDRESS_NUMBER as [addr:housenumber],\n\t\t-- Some tags just need their key changed\n\t\tUNIT as [addr:unit],\n\t\t-- Other tags need lookups and string manipulation\n\t\tCOALESCE(pre.Value || ' ', '')\n\t\t\t|| COALESCE(STREETNAME, '')\n\t\t\t|| COALESCE(' ' || suf.Value, '')\n\t\t\t|| COALESCE(' ' || post.Value, '') as [addr:street],\n\t\tPOSTAL_COMMUNITY as [addr:city],\n\t\tSTATE as [addr:state],\n\t\tZIPCODE as [addr:postcode],\n\t\t-- Null or empty fields don't become tags\n\t\tLANDMARK as [name],\n\t\t-- Arbitrary tags can be added from more complicated lookup tables\n\t\tmoreDetails.*\n\tFROM Elements\n\t-- Lookup are case-insensitive\n\tLEFT JOIN Directions as pre\n\t\tON pre.ID = PREDIR\n\tLEFT JOIN Directions as post\n\t\tON post.ID = POSTDIR\n\tLEFT JOIN StreetSuffixes as suf\n\t\tON suf.ID = SUFFIX\n\tLEFT JOIN PlaceTypes as moreDetails\n\t\tON moreDetails.ID = PLACE_TYPE\n\t-- Filter too, if you'd like. Those elements won't be in the result\n\tWHERE ADDRESS_NUMBER != '0'\n```\n\nJSON files can be loaded as tables with columns \"ID\" and \"Value\", like [this one](https://github.com/blackboxlogic/OsmTagsTranslator/blob/master/OsmTagsTranslator/Lookups/StreetSuffixes.json), which expands `SUFFIX=Pl` into `Place` :relieved:\n```javascript\n{\n\t...\n    \"PIKES\": \"Pike\",\n    \"PINE\": \"Pine\",\n    \"PINES\": \"Pines\",\n    \"PNES\": \"Pines\",\n    \"PL\": \"Place\",\n    \"PLAIN\": \"Plain\",\n    \"PLN\": \"Plain\",\n    \"PLAINS\": \"Plains\",\n\t...\n}\n```\nProvide as many lookup files as needed, like one to convert [\"E\" to \"East\"](https://github.com/blackboxlogic/OsmTagsTranslator/blob/master/OsmTagsTranslator/Lookups/Directions.json) or [add arbitrary other tags](https://github.com/blackboxlogic/OsmTagsTranslator/blob/master/OsmTagsTranslator/Lookups/PlaceTypes.json).\n\nRun `\u003e OsmTagsTranslatorConsole.exe SampleE911Addresses.osm Lookups\\Directions.json Lookups\\StreetSuffixes.json Lookups\\PlaceTypes.json Quieries\\E911AddressesToOsmSchema.sql`\n\nThe [resulting file](https://github.com/blackboxlogic/OsmTagsTranslator/blob/master/OsmTagsTranslator.Tests/E911AddressesToOsmSchema.sql%2BSampleE911Addresses.osm) is transformed into OSM conformant tags! :mage::tophat::rabbit2:\n```xml\n\u003c?xml version='1.0' encoding='UTF-8'?\u003e\n\u003cosm version='0.6'\u003e\n  \u003cnode id='-101753' lat='43.73086183589' lon='-70.33776262438'\u003e\n    \u003ctag k='addr:housenumber' v='18' /\u003e\n    \u003ctag k='addr:city' v='Westbrook' /\u003e\n    \u003ctag k='addr:state' v='ME' /\u003e\n    \u003ctag k='addr:street' v='East Lillian Place' /\u003e\n    \u003ctag k='addr:postcode' v='04092' /\u003e\n    \u003ctag k=\"amenity\" v=\"fire_station\" /\u003e\n  \u003cnode\u003e\n  ...\n\u003c/osm\u003e\n```\n\nThis project is an executable, interactive command line tool, and a [nuget package](https://www.nuget.org/packages/OsmTagsTranslator/). Running in a command prompt without a sql script like `\u003e OsmTagsTranslatorConsole.exe SampleE911Addresses.osm` lets you do data analysis, for example:\n```SQL\nSELECT POSTAL_COMMUNITY, count(1) FROM Elements GROUP BY POSTAL_COMMUNITY ORDER BY 2 DESC\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblackboxlogic%2Fosmtagstranslator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fblackboxlogic%2Fosmtagstranslator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblackboxlogic%2Fosmtagstranslator/lists"}