首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Angular.io中使用/实现Leaflet Bing层?

如何在Angular.io中使用/实现Leaflet Bing层?
EN

Stack Overflow用户
提问于 2018-06-18 19:06:44
回答 1查看 484关注 0票数 2

正在尝试构建要在具有Bing地图提供程序的组件中使用的leaflet服务。可以让它在javascript中工作,没有问题。问题在于,在TypeScript中,不可能为对象定义新的属性。强制转换为“any”,但不要截断它。

我使用的javascript扩展是这样的:https://github.com/digidem/leaflet-bing-layer

组件代码相关部分如下(javascript版本不使用服务,只包含脚本):

代码语言:javascript
复制
import * as L  from 'leaflet';

// ...

    var leafletHelperService = new LeafletHelperService();

    (L.TileLayer as any).Bing = L.TileLayer.extend(
        leafletHelperService.getExtensionObject(options)); // --> returns object with options, initialize(), getQuadKey, etc.

    (L.tileLayer as any).bing = function(options) {
        return new L.TileLayer.Bing(options); // --> property 'Bing' does not exist on type L.TileLayer
    }
    L.tileLayer
        .bing(options) // --> property 'bing' does not exist...
        .addTo(this.map);

主要的问题是不可能添加新的属性。我试图定义一个扩展L.TileLayer的接口,但它不起作用:

代码语言:javascript
复制
interface IBing extends L.TileLayer {
    Bing:Function;
}

是否需要直接修改leaflet的类型文件(.d.ts)?或者,对于这种情况,我是否应该将.js脚本导入到Angular/Typescript中(我已经让它像那样工作了,但它看起来像一个丑陋的变通方法)?

注意,我不喜欢使用别人的else端口,比如:https://github.com/Asymmetrik/ngx-leaflet

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2019-08-22 01:45:43

您可以通过将以下内容添加到项目的typings.d.ts来增加叶类型

代码语言:javascript
复制
import { tileLayer } from 'leaflet';

declare module 'leaflet' {
  namespace tileLayer {
    interface BingOptions extends TileLayerOptions {
      bingMapsKey?: string;
      imagerySet?: 'Aerial'|'AerialWithLabels'|'AerialWithLabelsOnDemand'|'CanvasDark'|'CanvasLight'|'CanvasGray'|'Road'|
        'RoadOnDemand'|'OrdnanceSurvey';
      culture?: string;
      style?: string;
    }

    export function bing(options: string|BingOptions): TileLayer;
  }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50908087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档