| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| import BoundingRect from 'zrender/src/core/BoundingRect'; |
| import { HashMap } from 'zrender/src/core/util'; |
| import { Group } from '../../util/graphic'; |
| import { Region } from './Region'; |
| |
| |
| export type GeoSVGSourceInput = string | Document | SVGElement; |
| export type GeoJSONSourceInput = string | GeoJSON | GeoJSONCompressed; |
| |
| export interface NameMap { |
| [regionName: string]: string |
| } |
| |
| export interface GeoSpecialAreas { |
| [areaName: string]: { |
| left: number; |
| top: number; |
| width?: number; |
| height?: number; |
| } |
| } |
| |
| // Currently only `FeatureCollection` is supported in `parseGeoJson`? |
| export interface GeoJSON extends GeoJSONFeatureCollection<GeoJSONGeometry> { |
| } |
| export interface GeoJSONCompressed extends GeoJSONFeatureCollection<GeoJSONGeometryCompressed> { |
| UTF8Encoding?: boolean; |
| UTF8Scale?: number; |
| } |
| interface GeoJSONFeatureCollection<G> { |
| type: 'FeatureCollection'; |
| features: GeoJSONFeature<G>[]; |
| } |
| interface GeoJSONFeature<G = GeoJSONGeometry> { |
| type: 'Feature'; |
| id?: string | number; |
| properties: { |
| name?: string; |
| cp?: number[]; |
| // id: string; |
| // childNum: number; |
| // Actual in GeoJSON spec, properties can be any. |
| [key: string]: any; |
| }; |
| geometry: G; |
| } |
| type GeoJSONGeometry = |
| GeoJSONGeometryPoint |
| | GeoJSONGeometryMultiPoint |
| | GeoJSONGeometryLineString |
| | GeoJSONGeometryMultiLineString |
| | GeoJSONGeometryPolygon |
| | GeoJSONGeometryMultiPolygon; |
| // Do not support `GeometryCollection` yet. |
| // | GeoJSONGeometryGeometryCollection |
| |
| type GeoJSONGeometryCompressed = |
| GeoJSONGeometryPoint |
| | GeoJSONGeometryMultiPoint |
| | GeoJSONGeometryLineString |
| | GeoJSONGeometryMultiLineString |
| // Currenly only Polygon and MultiPolygon can be parsed from compression. |
| | GeoJSONGeometryPolygonCompressed |
| | GeoJSONGeometryMultiPolygonCompressed; |
| // Do not support `GeometryCollection` yet. |
| // | GeoJSONGeometryGeometryCollection |
| |
| interface GeoJSONGeometryPoint { |
| type: 'Point'; |
| coordinates: number[]; |
| }; |
| interface GeoJSONGeometryMultiPoint { |
| type: 'MultiPoint'; |
| coordinates: number[][]; |
| }; |
| interface GeoJSONGeometryLineString { |
| type: 'LineString'; |
| coordinates: number[][]; |
| }; |
| interface GeoJSONGeometryMultiLineString { |
| type: 'MultiLineString'; |
| coordinates: number[][][]; |
| }; |
| export interface GeoJSONGeometryPolygon { |
| type: 'Polygon'; |
| coordinates: number[][][]; |
| }; |
| interface GeoJSONGeometryPolygonCompressed { |
| type: 'Polygon'; |
| coordinates: string[]; |
| encodeOffsets: number[][] |
| }; |
| export interface GeoJSONGeometryMultiPolygon { |
| type: 'MultiPolygon'; |
| coordinates: number[][][][]; |
| }; |
| interface GeoJSONGeometryMultiPolygonCompressed { |
| type: 'MultiPolygon'; |
| coordinates: string[][]; |
| encodeOffsets: number[][][]; |
| }; |
| // interface GeoJSONGeometryGeometryCollection { |
| // type: 'GeometryCollection'; |
| // geometries: GeoJSONGeometry[]; |
| // }; |
| |
| export interface GeoResource { |
| readonly type: 'geoJSON' | 'geoSVG'; |
| load( |
| nameMap: NameMap, |
| nameProperty: string |
| ): { |
| boundingRect: BoundingRect; |
| regions: Region[]; |
| // Key: region.name |
| regionsMap: HashMap<Region>; |
| }; |
| } |
| |
| export interface GeoSVGGraphicRoot extends Group { |
| isGeoSVGGraphicRoot: boolean; |
| } |