Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorIlya Zverev <zverik@textual.ru>2016-06-09 20:07:49 +0300
committerIlya Zverev <zverik@textual.ru>2016-06-09 20:07:49 +0300
commit53abe82a12d57175250ae1bfe58c101b96a370f7 (patch)
tree363a11659c9f5f2dc77f72b9a921e135ec0fbc33 /tools
parent69510f47b6f01a034575416e5061d69187237a27 (diff)
[mwm.py] Process metadata
Diffstat (limited to 'tools')
-rwxr-xr-xtools/python/mwm/find_feature.py8
-rw-r--r--tools/python/mwm/mwm.py19
2 files changed, 23 insertions, 4 deletions
diff --git a/tools/python/mwm/find_feature.py b/tools/python/mwm/find_feature.py
index 87b88066d5..2115848f4b 100755
--- a/tools/python/mwm/find_feature.py
+++ b/tools/python/mwm/find_feature.py
@@ -10,6 +10,7 @@ if len(sys.argv) < 4:
print(' t for inside types ("t hwtag" will find all hwtags-*)')
print(' et for exact type ("et shop" won\'t find shop-chemist)')
print(' n for names, case-sensitive ("n Starbucks" for all starbucks)')
+ print(' m for metadata keys ("m flats" for features with flats)')
sys.exit(1)
typ = sys.argv[2].lower()
@@ -18,7 +19,7 @@ find = sys.argv[3].decode('utf-8')
mwm = MWM(open(sys.argv[1], 'rb'))
mwm.read_header()
mwm.read_types(os.path.join(os.path.dirname(sys.argv[0]), '..', '..', '..', 'data', 'types.txt'))
-for feature in mwm.iter_features():
+for feature in mwm.iter_features(metadata=True):
found = False
if typ == 'n' and 'name' in feature['header']:
for value in feature['header']['name'].values():
@@ -30,5 +31,8 @@ for feature in mwm.iter_features():
found = True
elif typ == 't' and find in t:
found = True
+ elif typ == 'm' and 'metadata' in feature:
+ if find in feature['metadata']:
+ found = True
if found:
- print(json.dumps(feature, ensure_ascii=False))
+ print(json.dumps(feature, ensure_ascii=False).encode('utf-8'))
diff --git a/tools/python/mwm/mwm.py b/tools/python/mwm/mwm.py
index 99addccf8d..bb4c941690 100644
--- a/tools/python/mwm/mwm.py
+++ b/tools/python/mwm/mwm.py
@@ -12,7 +12,9 @@ from datetime import datetime
# - Find why polygon geometry is incorrect in iter_features()
# - Find feature ids in the 'dat' section, or find a way to read the 'offs' section
+
class MWM:
+ # coding/multilang_utf8_string.cpp
languages = ["default",
"en", "ja", "fr", "ko_rm", "ar", "de", "int_name", "ru", "sv", "zh", "fi", "be", "ka", "ko",
"he", "nl", "ga", "ja_rm", "el", "it", "es", "zh_pinyin", "th", "cy", "sr", "uk", "ca", "hu",
@@ -20,12 +22,14 @@ class MWM:
"af", "ja_kana", "lb", "pt", "hr", "fur", "vi", "tr", "bg", "eo", "lt", "la", "kk", "gsw",
"et", "ku", "mn", "mk", "lv", "hi"]
+ # indexer/feature_meta.hpp
metadata = ["0",
"cuisine", "open_hours", "phone_number", "fax_number", "stars",
"operator", "url", "website", "internet", "ele",
"turn_lanes", "turn_lanes_forward", "turn_lanes_backward", "email", "postcode",
"wikipedia", "maxspeed", "flats", "height", "min_height",
- "denomination", "building_levels"]
+ "denomination", "building_levels", "test_id", "ref:sponsored", "price_rate",
+ "rating", "fuel", "routes"]
def __init__(self, f):
self.f = f
@@ -137,6 +141,8 @@ class MWM:
t = self.read_varuint()
t = self.metadata[t] if t < len(self.metadata) else str(t)
fields[t] = self.read_string()
+ if t == 'fuel':
+ fields[t] = fields[t].split('\x01')
else:
while True:
t = self.read_uint(1)
@@ -204,13 +210,18 @@ class MWM:
RELATION = 0xC000000000000000
RESET = ~(NODE | WAY | RELATION)
- def iter_features(self):
+ def iter_features(self, metadata=False):
"""Reads 'dat' section."""
if not self.has_tag('dat'):
return
# TODO: read 'offs'?
+ md = {}
+ if metadata:
+ md = self.read_metadata()
self.seek_tag('dat')
+ ftid = -1
while self.inside_tag('dat'):
+ ftid += 1
feature = {}
feature_size = self.read_varuint()
next_feature = self.f.tell() + feature_size
@@ -245,6 +256,10 @@ class MWM:
header['house'] = self.read_numeric_string()
feature['header'] = header
+ # Metadata
+ if ftid in md:
+ feature['metadata'] = md[ftid]
+
# Geometry
geometry = {}
if geom_type == MWM.GeomType.POINT or geom_type == MWM.GeomType.POINT_EX: