Google Streetview被CORS封锁

问题描述

我想将Google地图中的StreetView集成到Web应用程序中,但是我被CORS阻止了。我基本上将街景作为背景添加到Three.js Webb应用程序中。该URL独立运行,但在我的应用程序中出现cors错误。有什么解决办法吗?

这是我的网址: http://maps.google.com/maps?q=&layer=c&cbll=40.7580336,0

我也尝试过使用cors-anywhere,如下所示: https://cors-anywhere.herokuapp.com/http://maps.google.com/maps?q=&layer=c&cbll=40.7580336,0

但没有成功。

我的代码

<html>

<head>
    <script src="https://threejs.org/build/three.js"></script>
</head>

<body>
    <script src="js/three.js"></script>
    <script>
        var scene = new THREE.Scene();
        var camera = new THREE.PerspectiveCamera(75,window.innerWidth / window.innerHeight,0.1,1000);

        // BG
        var container,loader,camera,scene,renderer,controls,bgTexture,bgWidth,bgHeight;
        loader = new THREE.TextureLoader();

        var url = "http://maps.google.com/maps?q=&layer=c&cbll=40.7580336,0";

        bgTexture = loader.load(url,function (texture) {
                var img = texture.image;
                bgWidth = img.width;
                bgHeight = img.height;
                resize();
            }
        );
        scene.background = bgTexture;
        //

        var renderer = new THREE.Webglrenderer();
        renderer.setSize(window.innerWidth,window.innerHeight);
        document.body.appendChild(renderer.domElement);

        var geometry = new THREE.BoxGeometry();
        var material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
        var cube = new THREE.Mesh(geometry,material);
        scene.add(cube);

        camera.position.z = 5;

        var animate = function () {
            requestAnimationFrame(animate);

            cube.rotation.x += 0.01;
            cube.rotation.y += 0.01;

            renderer.render(scene,camera);
        };

        animate();
    </script>
</body>

</html>

解决方法

您不能将Google Maps应用程序直接嵌入到您的应用程序中。您必须使用他们的Street View Service API,或者,如果您只需要静态图像而没有任何交互,则必须使用他们的Street View Static API

文档详细说明了如何实现这一目标。