当前位置: 首页 > 知识库问答 >
问题:

如何在openlayers中使用自己的bing地图样式

薛高澹
2023-03-14

有一个选项可以使用自己的颜色对BingMaps进行样式化:https://www.bing.com/api/maps/sdk/mapcontrol/isdk/CustomMapTileStylesandHexColor#ts

预定义样式的Openlayers中的BingMaps代码:https://codesandbox.io/s/bing-maps-oj97i

import "ol/ol.css";
import Map from "ol/Map";
import View from "ol/View";
import TileLayer from "ol/layer/Tile";
import BingMaps from "ol/source/BingMaps";

var styles = [
  "RoadOnDemand",
  "Aerial",
  "AerialWithLabelsOnDemand",
  "CanvasDark",
  "OrdnanceSurvey"
];
var layers = [];
var i, ii;
for (i = 0, ii = styles.length; i < ii; ++i) {
  layers.push(
    new TileLayer({
      visible: false,
      preload: Infinity,
      source: new BingMaps({
        key: "[BingMaps KEY]",
        imagerySet: styles[i],
        maxZoom: 19
      })
    })
  );
}
var map = new Map({
  layers: layers,
  target: "map",
  view: new View({
    center: [-6655.5402445057125, 6709968.258934638],
    zoom: 13
  })
});

var select = document.getElementById("layer-select");
function onChange() {
  var style = select.value;
  for (var i = 0, ii = layers.length; i < ii; ++i) {
    layers[i].setVisible(styles[i] === style);
  }
}
select.addEventListener("change", onChange);
onChange();

我如何在OpenLayers中使用自己的BingMaps样式/颜色?有可能吗?

共有1个答案

薛晨
2023-03-14

您需要一个自定义的贴图加载函数来将额外的设置添加到贴图URL上。在该示例中,您需要监视网络流量,以确定每个设置如何更改URL。

layers.forEach(function(layer){
  layer.getSource().setTileLoadFunction(function(tile, src) {
    tile.getImage().src = src + '&c4w=1&cstl=rd&src=h&st=ar|fc:b5db81_wt|fc:a3ccff_tr|fc:50a964f4;sc:50a964f4_ard|fc:ffffff;sc:ffffff_rd|fc:50fed89d;sc:50eab671_st|fc:ffffff;sc:ffffff_g|lc:dfdfdf';
  });
})

这些设置在https://docs.microsoft.com/en-us/bingmaps/articles/custom-map-style-in-bing-maps中进行了描述,看起来更简单的方法可能是将它们添加到API键中

key: "[BingMaps KEY]" + '&c4w=1&cstl=rd&src=h&st=ar|fc:b5db81_wt|fc:a3ccff_tr|fc:50a964f4;sc:50a964f4_ard|fc:ffffff;sc:ffffff_rd|fc:50fed89d;sc:50eab671_st|fc:ffffff;sc:ffffff_g|lc:dfdfdf'
 类似资料:
  • 用于在地图上生成点的数据, 我不知道前面该怎么做,请大家帮帮我。

  • 有没有办法将弹性搜索GeoHash转换为具有适当缩放级别的bing地图图钉? https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-geohashgrid-aggregation.html

  • 问题内容: 我想获取启动程序的计算机的IP地址,然后将其发送到客户端,但是我总是得到0.0.0.1而不是真实的IP地址(例如127.0.0.1)。 我目前可以获取端口,但无法获取IP地址。 我怎么才能得到它? 最好的解决方案是能够使用。这是我目前正在做的事情: 编辑: 我知道我的思维方式走错了路。所以我的问题是:获得自己的IP地址的最佳方法是什么? 问题答案: 当您将套接字设为0.0.0.0时,这

  • 我听说Dart使用自己的DartVM。因此,Flatter可以在开发应用程序时使用JIT(用于热重新加载)和AOT将后者构建为“原生”应用程序(.apk/.ipa)。 根据两个平台(Android/iOS)的文档: 提前(AOT)编译到本机ARM库中 但是,如果应用已经通过Dalvik/ART运行,那么Flatter如何在Android上使用自己的DartVM呢?虚拟机是否已内置到我们的系统中。a

  • 问题内容: 目标是可以轻松访问任何级别的SwiftUI视图层次结构的托管窗口。目的可能有所不同- 关闭窗口,退出第一响应者,替换根视图或contentViewController。与UIKit / AppKit集成有时也需要通过窗口的路径,因此… 我在这里遇到和尝试过的 像这样的东西 或通过在每个SwiftUI视图中添加UIViewRepresentable / NSViewRepresentab

  • 问题内容: 我想用继承自JFrame icon的icon创建我自己的文件,并在java中对其进行设置,而我自己的文件使用FileOutputStream和ObjectOutputStream Thank you in advance 问题答案: @David是对的,因为主机平台拥有这些装饰,但是您可以使用这些图标,这些图标通常可以 概括该平台的图标。例如, 其他装饰默认列举 here. SSCCE