diff --git a/generator/extract_addr/extract_addr.cpp b/generator/extract_addr/extract_addr.cpp index 01032bbe7a..83e5975dfd 100644 --- a/generator/extract_addr/extract_addr.cpp +++ b/generator/extract_addr/extract_addr.cpp @@ -16,6 +16,7 @@ #include #include +constexpr int32_t kRoundDigits = 1e6; std::set const kPoiTypes = {"amenity", "shop", "tourism", "leisure", "sport", "craft", "man_made", "office", "historic", "building"}; @@ -48,8 +49,8 @@ void PrintFeature(FeatureBuilder1 const & fb, uint64_t) auto const center = MercatorBounds::ToLatLon(fb.GetKeyPoint()); auto coordinates = my::NewJSONArray(); - ToJSONArray(*coordinates, strings::to_string_dac(center.lon, 6)); - ToJSONArray(*coordinates, strings::to_string_dac(center.lat, 6)); + ToJSONArray(*coordinates, std::round(center.lon * kRoundDigits) / kRoundDigits); + ToJSONArray(*coordinates, std::round(center.lat * kRoundDigits) / kRoundDigits); auto geometry = my::NewJSONObject(); ToJSONObject(*geometry, "type", "Point"); ToJSONObject(*geometry, "coordinates", coordinates); diff --git a/tools/python/mwm/decode_id.py b/tools/python/mwm/decode_id.py new file mode 100755 index 0000000000..376c91295f --- /dev/null +++ b/tools/python/mwm/decode_id.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python3 +import sys +import mwm + +if len(sys.argv) < 2: + print('This script unpacks maps.me OSM id to an OSM object link.') + print('Usage: {} '.format(sys.argv[0])) + +osm_id = mwm.unpack_osmid(int(sys.argv[1])) +type_abbr = {'n': 'node', 'w': 'way', 'r': 'relation'} +print('https://www.openstreetmap.org/{}/{}'.format( + type_abbr[osm_id[0]], osm_id[1])) diff --git a/tools/python/mwm/mwm.py b/tools/python/mwm/mwm.py index 4784f98b67..3259a518d1 100644 --- a/tools/python/mwm/mwm.py +++ b/tools/python/mwm/mwm.py @@ -496,12 +496,12 @@ RESET = ~(NODE | WAY | RELATION) def unpack_osmid(num): - if num & NODE == NODE: - typ = 'n' + if num & RELATION == RELATION: + typ = 'r' elif num & WAY == WAY: typ = 'w' - elif num & RELATION == RELATION: - typ = 'r' + elif num & NODE == NODE: + typ = 'n' else: return None return typ, num & RESET