当前位置:首页 > JavaScript

js实现街景图

2026-03-16 03:41:13JavaScript

使用 Google Maps JavaScript API 实现街景

在HTML文件中引入Google Maps API脚本,替换YOUR_API_KEY为实际API密钥:

<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap&libraries=streetView" async defer></script>

创建街景容器并初始化:

<div id="street-view" style="width: 100%; height: 500px;"></div>
<script>
  function initMap() {
    const fenway = { lat: 42.345573, lng: -71.098326 };
    const panorama = new google.maps.StreetViewPanorama(
      document.getElementById("street-view"),
      {
        position: fenway,
        pov: { heading: 34, pitch: 10 },
      }
    );
  }
</script>

通过Three.js自定义街景实现

安装Three.js库:

js实现街景图

npm install three

创建全景查看器基础代码:

import * as THREE from 'three';

const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

const geometry = new THREE.SphereGeometry(500, 60, 40);
geometry.scale(-1, 1, 1);
const texture = new THREE.TextureLoader().load('panorama.jpg');
const material = new THREE.MeshBasicMaterial({ map: texture });
const sphere = new THREE.Mesh(geometry, material);
scene.add(sphere);

camera.position.set(0, 0, 0.1);

function animate() {
  requestAnimationFrame(animate);
  renderer.render(scene, camera);
}
animate();

街景控制参数配置

Google街景常用控制参数:

js实现街景图

const panoramaOptions = {
  position: {lat: 40.756, lng: -73.986},  // 坐标位置
  pov: {
    heading: 270,    // 0-360度水平视角
    pitch: 0,        // -90到90度垂直视角
    zoom: 1          // 缩放级别
  },
  addressControl: true,
  showRoadLabels: true,
  zoomControl: true,
  linksControl: true
};

街景导航功能实现

添加街景导航控制按钮:

document.getElementById('rotate-left').addEventListener('click', () => {
  panorama.setPov({
    heading: (panorama.getPov().heading - 30) % 360,
    pitch: panorama.getPov().pitch
  });
});

document.getElementById('zoom-in').addEventListener('click', () => {
  panorama.setZoom(panorama.getZoom() + 1);
});

移动端适配处理

添加触摸事件支持:

const touchHandler = new Hammer(document.getElementById('street-view'));
touchHandler.get('pan').set({ direction: Hammer.DIRECTION_ALL });

touchHandler.on('pan', (ev) => {
  panorama.setPov({
    heading: panorama.getPov().heading - ev.deltaX * 0.2,
    pitch: Math.max(-90, Math.min(90, panorama.getPov().pitch + ev.deltaY * 0.1))
  });
});

性能优化建议

使用低分辨率预览模式:

const lowResPanorama = new google.maps.StreetViewPanorama(
  container,
  {
    position: location,
    visible: true,
    enableCloseButton: false,
    showRoadLabels: false,
    zoomControlOptions: {
      position: google.maps.ControlPosition.LEFT_BOTTOM
    },
    linksControl: false
  }
);

标签: 街景js
分享给朋友:

相关文章

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: fun…

js图片上传实现

js图片上传实现

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API实现基础图片上传功能。HTML部分需要设置accept="image/…

js实现上传图片

js实现上传图片

使用HTML5的File API实现图片上传 HTML5的File API允许通过JavaScript访问用户选择的文件。需要创建一个文件输入元素,并监听其change事件。 <input t…

js实现同步

js实现同步

同步与异步的概念 在JavaScript中,同步代码会按照顺序执行,每一行代码必须等待上一行代码执行完成后才能运行。异步代码则允许在等待某些操作(如网络请求)完成的同时继续执行其他代码。 实现同步的…