6

我正在尝试将 Bing 地图图块集成到传单中。我发现的所有插件都没有帮助,因为它们没有关于其使用的信息。我可以用 PHP 编写一个脚本来从 Leaflet 接收 X、Y 和 Z 坐标(只需将脚本设置为切片服务器 URL),但我需要一种将它们转换为 Quadkey 的方法。任何一个的答案都是可以接受的。如果有帮助,我确实有 Bing Maps API 密钥。

4

2 回答 2

5

GitHub 用户 shramov 的传单插件存储库(链接到 Nicolas 的答案中共享的要点)包括一个使用 Bing 平铺层的示例,据我所知,它维护得相当好。您需要包含Bing.js文件以及 Leaflet JS 和 CSS:

<link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7/leaflet.css" />
<script src="http://cdn.leafletjs.com/leaflet-0.7/leaflet.js"></script>
<script src="Bing.js"></script> 

<div id="map"></div>

<script type='text/javascript'>
    var map = new L.Map('map', {center: new L.LatLng(67.6755, 33.936), zoom: 10 });
    var bing = new L.BingLayer(YOUR_BING_API_KEY);
    map.addLayer(bing);
</script>

您会注意到 Bing 切片图层默认为航空影像。如果您打开Bing.js文件,您将在第 4 行看到该type属性设置为'Aerial'. 这可以更改为相应的平铺图像'Road''AerialWithLabels'用于相应的平铺图像。

于 2014-02-27T17:34:32.950 回答
3

我认为您不需要使用 php 模块来执行此操作,因为您可以直接从 Leaflet 中的 X/Y/Zoom 生成四键并将 Bing 地图图块集成到您的客户端应用程序中。要使用 JavaScript 将 X/Y/zoom 转换为四键,可以这样做:

function TileXYToQuadKey(tileX, tileY, levelOfDetail) {
    var quadKey = '';
    for (var i = levelOfDetail; i > 0; i--) {
        var digit = '0';
        var mask = 1 << (i - 1);
        if ((tileX & mask) != 0) {
            digit++;
        }
        if ((tileY & mask) != 0) {
            digit++; digit++;
        }
        quadKey += digit;
    } //for i return quadKey; 
}

这是 Bing 层在传单中的可能实现:https ://gist.github.com/1221998

在这里,您将找到有关 Bing 正在使用的平铺方案的有趣信息:http: //msdn.microsoft.com/en-us/library/bb259689.aspx

请记住,如果不考虑许可,则不应进行此使用。您应该使用图像服务的信息(如与传单插件一起使用)来集成它(这样您就可以跟踪您的使用情况并获得访问 Bing 磁贴 URI 的受支持方式),有关图像服务的更多信息,请参阅 MSDN 文档: http: //msdn.microsoft.com/en-us/library/ff701716.aspx

于 2013-01-21T16:52:08.913 回答