首页 / 浏览问题 / 云GIS / 问题详情
天地图提供有18级,但是classic 只能放大到15级
256EXP 2019年12月09日

使用超图的示例加载天地图的地图服务,地图只能放大到15级,但是天地图提供有18级,请问相关参数需要如何设置?

<script type="text/javascript">
    var map, tiandituLayer, marker, markers, tianMarkerLayer;
    map = new SuperMap.Map("map", {
        controls: [
            new SuperMap.Control.Navigation(),
            new SuperMap.Control.Zoom(),
            new SuperMap.Control.LayerSwitcher()

        ], allOverlays: true
    });
    tiandituLayer = new SuperMap.Layer.WMTS({
        name: "vec",
        url: "http://t0.tianditu.com/vec_c/wmts?tk=1d109683f4d84198e37a38c442d68311",
        layer: "vec",
        style: "default",
        matrixSet: "c",
        format: "tiles",
        opacity: 1,
        requestEncoding: "KVP"
    });
    tianMarkerLayer = new SuperMap.Layer.WMTS({
        name: "vec",
        url: "http://t0.tianditu.com/cva_c/wmts?tk=1d109683f4d84198e37a38c442d68311",
        layer: "cva",
        style: "default",
        matrixSet: "c",
        format: "tiles",
        opacity: 1,
        requestEncoding: "KVP"
    });
    tianMarkerLayer.layerType = "cva";
    tianMarkerLayer.isLabel = true;
    map.addControl(new SuperMap.Control.MousePosition());
    markers = new SuperMap.Layer.Markers("Markers");
    map.addLayers([tiandituLayer, markers, tianMarkerLayer]);
    map.setCenter(new SuperMap.LonLat(23, 37), 3);
    addMarker();

    var infowin = null;
    //定义mouseClickHandler函数,触发click事件会调用此函数
    function mouseClickHandler(event) {
        closeInfoWin();
        //初始化popup类
        popup = new SuperMap.Popup(
            "chicken",
            marker.getLonLat(),
            new SuperMap.Size(220, 140),
            '<img src="images/xila.jpg">',
            true,
            null
        );

        infowin = popup;
        //添加弹窗到map图层
        map.addPopup(popup);
    }

    function closeInfoWin() {
        if (infowin) {
            try {
                infowin.hide();
                infowin.destroy();
            }
            catch (e) {
            }
        }
    }

    function addMarker() {
        size = new SuperMap.Size(50, 50);
        offset = new SuperMap.Pixel(-(size.w / 2), -size.h);
        icon = new SuperMap.Icon('../img/markerbig_select.png', size, offset);
        //初始化标记覆盖物类
        marker = new SuperMap.Marker(new SuperMap.LonLat(23.6530190, 37.9439259), icon);
        //添加覆盖物到标记图层
        markers.addMarker(marker);
        //注册 click 事件,触发 mouseClickHandler()方法
        marker.events.on({
            "click": mouseClickHandler,
            "touchstart": mouseClickHandler     //假如要在移动端的浏览器也实现点击弹框,则在注册touch类事件
        });
    }
</script>

1个回答

您可以按照天地图服务的分辨率设置resolutions。具体设置方法可以参考API 

http://iclient.supermap.io/web/libs/iclient8c/apidoc/files/SuperMap/Layer/WMTS-js.html#SuperMap.Layer.WMTS.SuperMap.Layer.WMTS

5,668EXP 2019年12月09日

现在我通过map.numZoomLevels这个属性解决了。

但是有另外一个问题,就是当地图放大的层级超过了服务的最大层级,即请求不到瓦片了,如何使地图继续显示最后一级的瓦片,模糊放大也行。

这个已有的接口和方法中没有可以实现的方式,建议还是设置缩放级别为18级,或者如果有更多级别的需求的话可以考虑从天地图获取更多的地图服务来满足需求
你的意思是 找一下地图级别大于18的地图服务资源?
对的,要么就是固定只有18级地图层级或者就是找一个多于18级的地图资源,您说的那种让他使用最后一级资源的方式目前的接口没有合适的实现方式

你好,我找到了一个地图服务资源,但是只有18-20级。

就是说两个地图服务需要组合使用,当地图在边界值进行缩放时,需要切换地图服务。

也就是说需要监听地图的缩放事件,和获取当前层级。

但超图 iclassic 的官方api文档感觉不够详细,地图和图层支持哪些事件类型,都找不到?

缩放事件也没有找到。

超图iClassice官方api

您在这个界面往下拉  现在是在Properties,下拉到Functions里面就有相关的内容,比如getZoom、getScale这些都是有的

http://iclient.supermap.io/web/libs/iclient8c/apidoc/files/SuperMap/Map-js.html#SuperMap.Map.Functions

我不是说方法,我是说支持的事件类型,比如双击双击、鼠标移出事件等?
就这些列表里支持的事件,然后就没有了吗? 比如ZoomStart
没有zoomstart事件。如果想监听zoomstart的话可以通过movestart来实现。全局设置一个变量获取当前比例尺,在进行move事件的时候监听movestart后的比例尺,判断是否为同一比例尺,同一比例尺则为非zoom事件,否则为zoomstart事件。
解决问题了吗,天地图18级以上图片不显示问题
...