import { Info, InfoBlock } from './info';
import type { OSMReader } from '.';
import type { Pbf as Protobuf } from '../../readers/protobuf';
import type { Metadata, PrimitiveBlock } from './primitive';
import type { VectorFeature, VectorLineString, VectorMultiLineString, VectorMultiPolygon, VectorPoint } from '../../geometry';
/** An intermediate vector feature where the ways and nodes haven't been resolved yet. */
export interface IntermediateRelation {
    id: number;
    properties: Record<string, string>;
    members: IntermediateMember[];
    metadata: InfoBlock;
}
/** An intermediate vector feature where the way nodes haven't been resolved yet. */
export type IntermediateMember = IntermediateNodeMember | IntermediateWayMember;
/** An intermediate vector feature where the way nodes haven't been resolved yet. */
export interface IntermediateNodeMember {
    relationID: number;
    role: string;
    node: number;
}
/** An intermediate vector feature where the way nodes haven't been resolved yet. */
export interface IntermediateWayMember {
    role: string;
    way: number;
}
/**
 * @param relation - the intermediate relation
 * @param reader - the OSM reader
 * @returns - the feature in vector format
 */
export declare function intermediateRelationToVectorFeature(relation: IntermediateRelation, reader: OSMReader): Promise<VectorFeature<Metadata> | undefined>;
/** Member Type can be Node (0), Way (1) or Relation (2). */
export declare enum MemberType {
    /** Node Member */
    Node = 0,
    /** Way Member */
    Way = 1,
    /** Relation Member */
    Relation = 2
}
/** Member Options. Relations is skipped as it is not supported / has no use. */
export type Member = NodeMember | WayMember;
/** Node Member */
export interface NodeMember {
    id: number;
    role: string;
    node: VectorPoint;
}
/** Way Member */
export interface WayMember {
    id: number;
    role: string;
    way: VectorLineString;
}
/** Relation coordinates from ways with information about node relations. */
export type RelationGeometry = RelationGeometryLines | RelationGeometryArea;
/** Lines Geometry */
export interface RelationGeometryLines {
    type: 0;
    coordinates: VectorMultiLineString;
}
/** Area Geometry */
export interface RelationGeometryArea {
    type: 1;
    coordinates: VectorMultiPolygon;
}
/**
 * Relation class contains a collection of nodes, ways and relations as members.
 */
export declare class Relation {
    #private;
    primitiveBlock: PrimitiveBlock;
    reader: OSMReader;
    id: number;
    info?: Info;
    /**
     * @param primitiveBlock - the primitive block
     * @param reader - the OSM reader
     * @param pbf - the Protobuf if provided
     */
    constructor(primitiveBlock: PrimitiveBlock, reader: OSMReader, pbf?: Protobuf);
    /** @returns - true if the relation is filterable */
    isFilterable(): boolean;
    /** @returns - the properties of the relation */
    properties(): Record<string, string>;
    /**
     * Each member can be node, way or relation.
     * @returns an array of members associated with this relation
     */
    members(): IntermediateMember[];
    /** @returns - the feature in intermediate format to build later */
    toIntermediateFeature(): undefined | IntermediateRelation;
}
/**
 * @param members - an array of members
 * @returns - an array of node members that have a 'label' or 'admin_centre' role
 */
export declare function getNodeRelationPairs(members: IntermediateMember[]): IntermediateNodeMember[];
//# sourceMappingURL=relation.d.ts.map