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; 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 | 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; /** * 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