| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- -- NOTE: Beautification tool not available. Original content preserved.
- -- Määrame skeemi keskkonnamuutujast või vaikimisi 'public'
- local schema = os.getenv("PGSCHEMA") or "public"
- local tables = {}
- -- Define the "countries" locator and get all country geometries from the
- -- database. Use the import-countries.lua file to import them first, before
- -- you run this.
- local countries = osm2pgsql.define_locator({name = "countries"})
- countries:add_from_db("SELECT code, ST_Subdivide(geom, 200) FROM " .. schema .. ".countries")
- tables.buildings =
- osm2pgsql.define_way_table(
- "buildings",
- {
- -- Add a SERIAL column and tell osm2pgsql not to fill it (PostgreSQL will
- -- do that for us)
- {column = "id", sql_type = "serial", create_only = true},
- -- We always need a highway type, so we can declare the column as NOT NULL
- -- This will contain the country code of the first matching country
- -- (which can be any of the countries because there is no order here).
- {column = "country", type = "text"},
- {column = "city", type = "text"},
- {column = "street", type = "text"},
- {column = "housenumber", type = "text"},
- {column = "housename", type = "text"},
- {column = "postcode", type = "text"},
- {column = "name", type = "text"},
- {column = "place", type = "text"},
- {column = "amenity", type = "text"},
- {column = "height", type = "int"},
- {column = "use", type = "text"},
- {column = "levels", type = "int"},
- {column = "tags", type = "jsonb"},
- {column = "geom", type = "polygon", not_null = true}
- },
- {
- schema = schema,
- proj = 3301
- }
- )
- -- Helper function to remove some of the tags we usually are not interested in.
- -- Something like this can be useful if you are writing all tags to the
- -- database in a JSON(B) column and don't want that cluttered with lots of tags
- -- nobody cares about. Returns true if there are no tags left.
- local function clean_tags(tags)
- local keys_to_remove = {
- "shelter"
- }
- for _, key in ipairs(keys_to_remove) do
- tags[key] = nil
- end
- return next(tags) == nil
- end
- -- Mittevajalike tag'ide eemaldamine
- local function hide_tags(tags)
- local keys_to_hide = {
- "odbl", "created_by", "source", "source:ref", "source:addr",
- "addr:country", "addr:city", "addr:street", "addr:housenumber", "addr:housename",
- "addr:postcode", "height", "building", "maaamet:ETAK", "building:use",
- "building:levels", "old_addr:street", "old_addr:housenumber", "source:addr:2023",
- "maaamet:orig_tunnus", "wikidata", "old_addr:housename", "old_addr:place",
- "name", "phone", "internet_access", "wheelchair", "roof:shape",
- "name:en", "name:ru", "brand", "fuel", "website", "alt_name",
- "capacity", "operator", "fuel:diesel", "self_service", "opening_hours",
- "brand:wikidata", "fuel:octane_95", "fuel:octane_98", "brand:wikipedia",
- "roof:material", "email", "name:et", "roof", "stars", "fee",
- "old_name", "name:fi", "description:ru", "url", "name:lt",
- "addr:place", "roof:levels", "addr:name", "name:pl", "name:lv",
- "payment:credit_cards", "payment:debit_cards", "amenity", "tourism",
- "shop", "man_made", "addr:old_street", "operator:wikidata",
- "fuel:adblue", "contact:email", "leisure", "contact:phone",
- "contact:website", "healthcare", "maaamet:ADS", "name:vro",
- "check_date", "building:material", "owner:ru", "int_name", "wikipedia", "power",
- "fuel:HGV_diesel", "branch", "EE:EHIS:id", "operator:type", "operator:type",
- "layer"
- }
- for _, key in ipairs(keys_to_hide) do
- tags[key] = nil
- end
- return next(tags) == nil
- end
- function osm2pgsql.process_way(object)
- -- Get the type of "building" and remove it from the tags
- local building = object.tags.building
- -- Only with geometry
- local geom = object:as_polygon()
- if not geom then
- return
- end
- -- Only Estonia
- local cc = countries:first_intersecting(geom)
- if cc ~= "EE" then
- return
- end
- if building then
- local city = object.tags["addr:city"]
- local street = object.tags["addr:street"]
- local housenumber = object.tags["addr:housenumber"]
- local housename = object.tags["addr:housename"]
- local postcode = object.tags["addr:postcode"]
- local name = object.tags["name"] or object.tags["addr:name"]
- local place = object.tags["addr:place"]
- local amenity = object.tags["amenity"] or object.tags["tourism"] or object.tags["shop"]
- or object.tags["man_made"] or object.tags["leisure"] or object.tags["healthcare"]
- or object.tags["power"]
- local use = object.tags["building:use"]
- local levels = object.tags["building:levels"]
- local tags = object.tags
- local height = object.tags.height
- -- the way
- local row = {
- country = cc,
- city = city,
- street = street,
- housenumber = housenumber,
- housename = housename,
- postcode = postcode,
- name = name,
- place = place,
- amenity = amenity,
- height = height,
- use = use,
- levels = levels,
- tags = tags,
- geom = geom
- }
- if clean_tags(object.tags) then
- return
- end
- -- hide_tags(object.tags)
- tables.buildings:insert(row)
- end
- end
|