void expire_tiles::from_nodes_line(const nodelist_t &nodes) { if (Options->expire_tiles_zoom < 0 || nodes.empty()) return; if (nodes.size() == 1) { from_bbox(nodes[0].lon, nodes[0].lat, nodes[0].lon, nodes[0].lat); } else { for (size_t i = 1; i < nodes.size(); ++i) from_line(nodes[i-1].lon, nodes[i-1].lat, nodes[i].lon, nodes[i].lat); } }
size_t middle_ram_t::nodes_get_list(nodelist_t &out, const idlist_t nds) const { for (idlist_t::const_iterator it = nds.begin(); it != nds.end(); ++it) { osmNode n; if (!cache->get(&n, *it)) out.push_back(n); } return int(out.size()); }
/* * Calculate a bounding box from a list of nodes and expire all tiles within it */ void expire_tiles::from_nodes_poly(const nodelist_t &nodes, osmid_t osm_id) { if (Options->expire_tiles_zoom < 0 || nodes.empty()) return; double min_lon = nodes[0].lon; double min_lat = nodes[0].lat; double max_lon = nodes[0].lon; double max_lat = nodes[0].lat; for (size_t i = 1; i < nodes.size(); ++i) { if (nodes[i].lon < min_lon) min_lon = nodes[i].lon; if (nodes[i].lat < min_lat) min_lat = nodes[i].lat; if (nodes[i].lon > max_lon) max_lon = nodes[i].lon; if (nodes[i].lat > max_lat) max_lat = nodes[i].lat; } if (from_bbox(min_lon, min_lat, max_lon, max_lat)) { /* Bounding box too big - just expire tiles on the line */ fprintf(stderr, "\rLarge polygon (%.0f x %.0f metres, OSM ID %" PRIdOSMID ") - only expiring perimeter\n", max_lon - min_lon, max_lat - min_lat, osm_id); from_nodes_line(nodes); } }