Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MapKit.js中的缩放和位置管理_Javascript_Mapkit - Fatal编程技术网

Javascript MapKit.js中的缩放和位置管理

Javascript MapKit.js中的缩放和位置管理,javascript,mapkit,Javascript,Mapkit,我使用MapKit.js创建了以下地图,其中包含数百个自定义注释、聚类(黄点)和注释单击时弹出的标注 当单击弹出链接时,我想做的只是放大一步,并将视图居中显示在单击的注释上(在响应上下文中) 在我习惯的谷歌地图中,你们只需根据地图的中心和缩放级别来定位地图 在MapKit.js中,您使用的是中心/区域组合,老实说,我不明白这是如何工作的 官方文件对我来说并不清楚,我也无法找到真正有启发性的资源 如果有人能向我解释我们应该如何使用“中心/区域”组合来管理缩放级别,我将不胜感激 谢谢:-) [编辑

我使用MapKit.js创建了以下地图,其中包含数百个自定义注释、聚类(黄点)和注释单击时弹出的标注

当单击弹出链接时,我想做的只是放大一步,并将视图居中显示在单击的注释上(在响应上下文中)

在我习惯的谷歌地图中,你们只需根据地图的中心和缩放级别来定位地图

在MapKit.js中,您使用的是中心/区域组合,老实说,我不明白这是如何工作的

官方文件对我来说并不清楚,我也无法找到真正有启发性的资源

如果有人能向我解释我们应该如何使用“中心/区域”组合来管理缩放级别,我将不胜感激

谢谢:-)

[编辑]

这个中心/区域的东西对我来说仍然没有意义,所以我决定用缩放功能覆盖MapKit.js

多亏了,我成功地实现了缩放计算,看起来还可以

我现在需要执行设置缩放操作。
还没有成功,这个数学问题现在已经解决了^^

欢迎任何帮助:-)

功能:

function MapKitJsZoom(map) {
    var LN2 = 0.6931471805599453; // ???
    var WH = 256; // World Height
    var WW = 256; // World Width
    var MAX = 21; // Max zoom level

    // GET CURRENT ZOOM.

    var latToRad = function (lat) {
        var sin = Math.sin(lat * Math.PI / 180);
        var radX2 = Math.log((1 + sin) / (1 - sin)) / 2;
        return Math.max(Math.min(radX2, Math.PI), -Math.PI) / 2;
    };

    var zoom = function (mapPx, worldPx, fraction) {
        return (Math.log(mapPx / worldPx / fraction) / LN2);
    };

    this.get = function () {
        var bounds = map.region.toBoundingRegion();
        var latFraction = (latToRad(bounds.northLatitude) - latToRad(bounds.southLatitude)) / Math.PI;
        var latZoom = zoom(map.element.clientHeight, WH, latFraction);

        var lngDiff = bounds.eastLongitude - bounds.westLongitude;
        var lngFraction = ((lngDiff < 0) ? (lngDiff + 360) : lngDiff) / 360;
        var lngZoom = zoom(map.element.clientWidth, WW, lngFraction);

        return Math.round(Math.min(latZoom, lngZoom, MAX));
    };

    // SET CURRENT ZOOM

    this.set = function (zoom) {
        // TODO
        // I need to calculate latitude and longitude deltas
        // that correspond to required zoom based on viewport size
        // (map.element.clientWidth and map.element.clientHeight)

        map.region.span = new mapkit.CoordinateSpan(latitudeDelta, longitudeDelta);
    };

}
    var map = new mapkit.Map("map");

    map.zoom = new MapKitJsZoom(map);

    map.addEventListener('region-change-end', function () {
        console.log(map.zoom.get());
    });

实现这一点有两种方法:

1) 设置中心,然后更改缩放级别

var newCenter = new mapkit.Coordinate(37.792446, -122.399360);
map._impl.zoomLevel--;
map.setCenterAnimated(newCenter, true);
2) 使用中心和跨距设置区域(以度为单位的增量)


显然,LN2是2的自然对数,在js中可以通过
Math获得。LN2
:执行此操作后,有没有办法返回到以前的缩放级别?我正在单击多个注释中的单个注释并放大地图以使坐标居中,但一旦用户关闭“信息”窗口,我需要恢复到所有注释。
var newCenter = new mapkit.Coordinate(37.792446, -122.399360);
var span = new mapkit.CoordinateSpan(.01);
var region = new mapkit.CoordinateRegion(newCenter, span);
map.setRegionAnimated(region)