module NSWTopo::Overlay
def get_features
def get_features GPS.new(@path).tap do |gps| @simplify = true if GPS::GPX === gps @tolerance ||= [@map.to_mm(5), TOLERANCE].max if @simplify end.collection.reproject_to(@map.neatline.projection).explode.map! do |feature| if @tolerance && GeoJSON::LineString === feature feature.simplify(@tolerance).segmentise(2*@tolerance).smooth_window(3) else feature end end.map! do |feature| styles, folder, name = feature.values_at "styles", "folder", "name" styles ||= GPX_STYLES case feature when GeoJSON::LineString styles["stroke-linejoin"] = "round" when GeoJSON::Polygon styles["stroke-linejoin"] = "miter" end categories = [folder, name].compact.reject(&:empty?).map(&method(:categorise)) keys = styles.keys - params_for(categories.to_set).keys styles = styles.slice *keys categories << feature.object_id @params[categories.join(?\s)] = styles if styles.any? feature.with_properties("category" => categories) end end
def to_s
def to_s counts = %i[linestrings polygons].map do |type| features.send type end.reject(&:empty?).map(&:length).zip(%w[line polygon]).map do |count, word| "%s %s%s" % [count, word, (?s if count > 1)] end.join(", ") "%s: %s" % [@name, counts] end