]> git.openstreetmap.org Git - nominatim.git/blobdiff - lib-lua/themes/nominatim/init.lua
ignore overly long ways during import
[nominatim.git] / lib-lua / themes / nominatim / init.lua
index 8f88f0c1a6761222aa23202bc1a75e5f9865f861..fef86f919eb8611136d08d5cf6e2c96afc930f31 100644 (file)
@@ -40,12 +40,6 @@ if type(themepark) ~= 'table' then
     themepark = nil
 end
 
--- tables required for taginfo
-module.TAGINFO_MAIN = {keys = {}, delete_tags = {}}
-module.TAGINFO_NAME_KEYS = {}
-module.TAGINFO_ADDRESS_KEYS = {}
-
-
 -- The single place table.
 local place_table_definition = {
     name = "place",
@@ -140,6 +134,22 @@ function PlaceTransform.named_with_key(place, k)
     end
 end
 
+-- Special transform used with address fallbacks: ignore all names
+-- except for those marked as being part of the address.
+local function address_fallback(place)
+    if next(place.names) == nil or NAMES.house == nil then
+        return place
+    end
+
+    local names = {}
+    for k, v in pairs(place.names) do
+        if NAME_FILTER(k, v) == 'house' then
+            names[k] = v
+        end
+    end
+    return place:clone{names=names}
+end
+
 --------- Built-in extratags transformation functions ---------------
 
 local function default_extratags_filter(p, k)
@@ -385,7 +395,7 @@ function Place:grab_name_parts(data)
                     self.has_name = true
                 elseif atype == 'house' then
                     self.has_name = true
-                    fallback = {'place', 'house', PlaceTransform.always}
+                    fallback = {'place', 'house', address_fallback}
                 end
             end
         end
@@ -415,7 +425,7 @@ function Place:write_row(k, v)
     if self.geometry == nil then
         self.geometry = self.geom_func(self.object)
     end
-    if self.geometry:is_null() then
+    if self.geometry == nil or self.geometry:is_null() then
         return 0
     end
 
@@ -598,6 +608,9 @@ function module.process_way(object)
 
         if geom:is_null() then
             geom = o:as_linestring()
+            if geom:is_null() or geom:length() > 30 then
+                return nil
+            end
         end
 
         return geom
@@ -642,7 +655,7 @@ function module.process_tags(o)
 
     -- address keys
     if o:grab_address_parts{groups=ADDRESS_FILTER} > 0 and fallback == nil then
-        fallback = {'place', 'house', PlaceTransform.always}
+        fallback = {'place', 'house', address_fallback}
     end
     if o.address.country ~= nil and #o.address.country ~= 2 then
         o.address['country'] = nil
@@ -904,4 +917,9 @@ function module.set_relation_types(data)
     end
 end
 
+
+function module.get_taginfo()
+    return {main = MAIN_KEYS, name = NAMES, address = ADDRESS_TAGS}
+end
+
 return module