SuperMap / iClient-JavaScript

Modern GIS Web Client for JavaScript, based on Leaflet\OpenLayers\MapboxGL-JS\Classic(iClient8C), enhanced with ECharts\D3\MapV etc. Contributed by SuperMap & community.
https://iclient.supermap.io
Apache License 2.0
831 stars 282 forks source link

【bug】官网示例报错 editor.html:46 Uncaught TypeError: mapboxgl.CRS is not a constructor #428

Closed YangShuqing closed 1 year ago

YangShuqing commented 1 year ago

官网demo, mapbox->WGS84->地图加载 设置 CRS时报错 crs: new mapboxgl.CRS('EPSG:4326',[-180,-90,180,90]), // 或者 mapboxgl.CRS.EPSG4326 或者 new mapboxgl.CRS('EPSG:4326',[-180,-90,180,90]);

http://support.supermap.com.cn:8090/iserver/iClient/forJavaScript/examples/mapboxgl/editor.html#01_tiledMapLayer_4326

<!--********************************************************************
* Copyright© 2000 - 2023 SuperMap Software Co.Ltd. All rights reserved.
*********************************************************************-->
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" />
        <title data-i18n="resources.title_tiledMapLayer_4326WGS84"></title>
        <script type="text/javascript" src="../js/include-web.js"></script>
        <script
            type="text/javascript"
            include="mapbox-gl-enhance-beta"
            src="../../dist/mapboxgl/include-mapboxgl.js"
        ></script>
        <style>
            body {
                margin: 0;
                padding: 0;
            }

            #map {
                position: absolute;
                top: 0;
                bottom: 0;
                width: 100%;
            }
        </style>
    </head>

    <body>
        <div id="map"></div>
        <script type="text/javascript">
            var host = window.isLocal ? window.server : 'https://iserver.supermap.io';
            var map = new mapboxgl.Map({
                container: 'map', // container id
                style: {
                    version: 8,
                    sources: {
                        'raster-tiles': {
                            type: 'raster',
                            tileSize: 256,
                            //xyz形式,原生支持
                            //"tiles": ['https://t0.tianditu.gov.cn/DataServer?T=vec_c&x={x}&y={y}&l={z}'],

                            //iserver image资源模板;扩展支持
                            //"tiles": ['http://localhost:8090/iserver/services/map-World/rest/maps/World/image.png?viewBounds={viewBounds}&width={width}&height={height}'],

                            //iserver tileimage资源模板;扩展支持
                            //"tiles": ['https://iserver.supermap.io/iserver/services/map-jingjin/rest/maps/%E4%BA%AC%E6%B4%A5%E5%9C%B0%E5%8C%BA%E5%9C%B0%E5%9B%BE/tileimage.png?scale={scale}&x={x}&y={y}&width={width}&height={height}&origin={"x":-180,"y":90}'],

                            //推荐;   iserver tileimage资源;扩展支持
                            //参数列表:
                            //地图服务地址(到地图名)必填 ;
                            //rasterSource为"iserver";必填;
                            //transparent:可选,默认为true;
                            //cacheEnabled: 是否使用缓存,默认为true;
                            //redirect: 如果为 true,则将请求重定向到瓦片的真实地址;如果为 false,则响应体中是瓦片的字节流,默认为false;
                            //layersID:要显示的图层id字符串;
                            //tileversion: 切片版本名称,cacheEnabled 为 true 时有效;
                            //rasterfunction: 栅格分析参数,类型为mapboxgl.supermap.NDVIParameter或mapboxgl.supermap.HillshadeParameter;
                            //format:瓦片格式,默认为'png';
                            tiles: [host + '/iserver/services/map-world/rest/maps/World'],
                            rasterSource: 'iserver'
                        }
                    },

                    layers: [
                        {
                            id: 'simple-tiles',
                            type: 'raster',
                            source: 'raster-tiles',
                            minzoom: 0,
                            maxzoom: 22
                        }
                    ]
                },
                crs: new mapboxgl.CRS('EPSG:4326',[-180,-90,180,90]), // 或者 mapboxgl.CRS.EPSG4326  或者 new mapboxgl.CRS('EPSG:4326',[-180,-90,180,90]);
                center: [0, 0],
                zoom: 2
            });
            map.on('load', function() {
                //从 iServer 查询
                var idsParam = new mapboxgl.supermap.GetFeaturesByIDsParameters({
                    IDs: [234],
                    datasetNames: ['World:Countries']
                });
                var service = new mapboxgl.supermap.FeatureService(host + '/iserver/services/data-world/rest/data');
                service.getFeaturesByIDs(idsParam, function(serviceResult) {
                    map.addSource('queryDatas', {
                        type: 'geojson',
                        data: serviceResult.result.features
                    });
                    map.addLayer({
                        id: 'queryDatas',
                        type: 'fill',
                        source: 'queryDatas',
                        paint: {
                            'fill-color': '#008080',
                            'fill-opacity': 0.4
                        },
                        filter: ['==', '$type', 'Polygon']
                    });
                });
                map.addControl(new mapboxgl.NavigationControl(), 'top-left');
            });
        </script>
    </body>
</html>
songyumeng commented 1 year ago

可以访问这个例子https://iclient.supermap.io/examples/mapboxgl/editor.html#01_tiledMapLayer_4326

YangShuqing commented 1 year ago

可以访问这个例子https://iclient.supermap.io/examples/mapboxgl/editor.html#01_tiledMapLayer_4326

使用你发的链接后不报错了, 但是 如果使用 文档中的 head引用JS的话还是会报同样的错误 文档 https://iclient.supermap.io/web/introduction/mapboxglDevelop.html#GetLibs

<head>
            <meta charset="UTF-8">
            <link href="https://cdnjs.cloudflare.com/ajax/libs/mapbox-gl/1.13.2/mapbox-gl.css" rel="stylesheet" />
            <link href="https://iclient.supermap.io/dist/mapboxgl/iclient-mapboxgl.min.css" rel="stylesheet" />
            <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mapbox-gl/1.13.2/mapbox-gl.js"></script>
            <script type="text/javascript" src="https://iclient.supermap.io/dist/mapboxgl/iclient-mapboxgl.js"></script>
          </head>

完整code

<!DOCTYPE html>
     <html>
        <head>
            <meta charset="UTF-8">
            <link href="https://cdnjs.cloudflare.com/ajax/libs/mapbox-gl/1.13.2/mapbox-gl.css" rel="stylesheet" />
            <link href="https://iclient.supermap.io/dist/mapboxgl/iclient-mapboxgl.min.css" rel="stylesheet" />
            <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mapbox-gl/1.13.2/mapbox-gl.js"></script>
            <script type="text/javascript" src="https://iclient.supermap.io/dist/mapboxgl/iclient-mapboxgl.js"></script>
            <style>
                body {
                    margin: 0;
                    padding: 0;
                }

                #map {
                    position: absolute;
                    top: 0;
                    bottom: 0;
                    width: 100%;
                }
            </style>
        </head>

        <body>
            <div id="map"></div>
            <script type="text/javascript">
                var host = window.isLocal ? window.server : 'https://iserver.supermap.io';
                var map = new mapboxgl.Map({
                    container: 'map', // container id
                    style: {
                        version: 8,
                        sources: {
                            'raster-tiles': {
                                type: 'raster',
                                tileSize: 256,
                                //xyz形式,原生支持
                                //"tiles": ['https://t0.tianditu.gov.cn/DataServer?T=vec_c&x={x}&y={y}&l={z}'],

                                //iserver image资源模板;扩展支持
                                //"tiles": ['http://localhost:8090/iserver/services/map-World/rest/maps/World/image.png?viewBounds={viewBounds}&width={width}&height={height}'],

                                //iserver tileimage资源模板;扩展支持
                                //"tiles": ['https://iserver.supermap.io/iserver/services/map-jingjin/rest/maps/%E4%BA%AC%E6%B4%A5%E5%9C%B0%E5%8C%BA%E5%9C%B0%E5%9B%BE/tileimage.png?scale={scale}&x={x}&y={y}&width={width}&height={height}&origin={"x":-180,"y":90}'],

                                //推荐;   iserver tileimage资源;扩展支持
                                //参数列表:
                                //地图服务地址(到地图名)必填 ;
                                //rasterSource为"iserver";必填;
                                //transparent:可选,默认为true;
                                //cacheEnabled: 是否使用缓存,默认为true;
                                //redirect: 如果为 true,则将请求重定向到瓦片的真实地址;如果为 false,则响应体中是瓦片的字节流,默认为false;
                                //layersID:要显示的图层id字符串;
                                //tileversion: 切片版本名称,cacheEnabled 为 true 时有效;
                                //rasterfunction: 栅格分析参数,类型为mapboxgl.supermap.NDVIParameter或mapboxgl.supermap.HillshadeParameter;
                                //format:瓦片格式,默认为'png';
                                tiles: [host + '/iserver/services/map-world/rest/maps/World'],
                                rasterSource: 'iserver'
                            }
                        },

                        layers: [
                            {
                                id: 'simple-tiles',
                                type: 'raster',
                                source: 'raster-tiles',
                                minzoom: 0,
                                maxzoom: 22
                            }
                        ]
                    },
                    crs: new mapboxgl.CRS('EPSG:4326',[-180,-90,180,90]) , // 或者 mapboxgl.CRS.EPSG4326  或者 new mapboxgl.CRS('EPSG:4326',[-180,-90,180,90]);
                    center: [0, 0],
                    zoom: 2
                });

                // map.on('load', function() {
                //     //从 iServer 查询
                //     var idsParam = new mapboxgl.supermap.GetFeaturesByIDsParameters({
                //         IDs: [234],
                //         datasetNames: ['World:Countries']
                //     });
                //     var service = new mapboxgl.supermap.FeatureService(host + '/iserver/services/data-world/rest/data');
                //     service.getFeaturesByIDs(idsParam, function(serviceResult) {
                //         map.addSource('queryDatas', {
                //             type: 'geojson',
                //             data: serviceResult.result.features
                //         });
                //         map.addLayer({
                //             id: 'queryDatas',
                //             type: 'fill',
                //             source: 'queryDatas',
                //             paint: {
                //                 'fill-color': '#008080',
                //                 'fill-opacity': 0.4
                //             },
                //             filter: ['==', '$type', 'Polygon']
                //         });
                //     });
                //     map.addControl(new mapboxgl.NavigationControl(), 'top-left');
                // });
            </script>
        </body>
</html>
YangShuqing commented 1 year ago

@songyumeng

luoxiao-supermap commented 1 year ago

显示非3857投影的地图,需要引入我们扩展的mapbox-gl-enhance.js: https://iclient.supermap.io/web/libs/mapbox-gl-js-enhance/1.12.1/mapbox-gl-enhance.js

YangShuqing commented 1 year ago

显示非3857投影的地图,需要引入我们扩展的mapbox-gl-enhance.js: https://iclient.supermap.io/web/libs/mapbox-gl-js-enhance/1.12.1/mapbox-gl-enhance.js

这个拓展 有NPM的包么 @luoxiao-supermap