当前位置: 首页 > news >正文

Nuxt3 简单集成 GoogleMap

只是想用 GoogleMap 做一个指定位置的 Marker 显示,并不想集成别人二次开发的插件,应该怎么做?

功能需求

项目中需要做一个基于 GoogleMap 的地图显示,只需要显示一个地图,并在地图上标记一个地理位置即可。
因为需求很简单,所以想直接通过 GoogleMap 官方的 JS API 来实现,并不想用一些二次开发的插件。

最终效果

在这里插入图片描述

实现步骤

安装插件

Google Maps JavaScript API 文档中默认展现的是通过 <script> 标签进行导入的方式,这显然与我们的项目不符。
但其实在这里 Google Maps JavaScript API Dynamic Loading Package 就提供了通过 NPM 安装的实现方式,如下图:
在这里插入图片描述

所以我们只需要执行以下语句来安装插件即可:

yarn add @googlemaps/js-api-loader

因为使用的 Typescript ,所以参考 Google Maps Using Typescript 还需要继续执行以下语句:

yarn add @types/google.maps --dev

基于 Nuxt3 的关键配置

通过上述方式安装插件并开发完成后,在 Nuxt3 的开发模式下就可以完美显示地图了,但当我们构建项目并通过基于 node 环境的 SSR 模式启动项目后,访问时会抛出下图中的错误信息:

[nuxt] [request error] [unhandled] [500] Named export 'Loader' not found. The requested module '@googlemaps/js-api-loader' is a CommonJS module, which may not support all module.exports as named exports.
CommonJS modules can always be imported via the default export, for example using

在这里插入图片描述

解决方式当然不是图中这个 for example using 提到的,而是需要在 nuxt.config.ts 中添加如下代码:

build: {
  transpile: ['@googlemaps/js-api-loader']
},

渲染地图

初始化地图的方式在这里 Google Maps JavaScript API Dynamic Loading Package 有提到,具体实现如下:

<template>
    <div id="map" class="google-map"/>
</template>

<script setup lang="ts">
  import { onMounted, ref } from '#imports'
  import { Loader } from '@googlemaps/js-api-loader'

  const location = { lat: -34.397, lng: 150.644 }

  onMounted(() => {
    initMap()
  })

  const initMap = () => {
    const loader = new Loader({
      apiKey: 'AIzaSyB41DRUbKWJHPxaFjMAwdrzWzbVKartNGg',
      version: 'weekly'
    })

    loader.load().then(() => {
      // 初始化地图
      const map = new google.maps.Map(document.getElementById('map'), {
        center: location,
        // 缩放级别在街道
        zoom: 15,
		// 禁用默认的工具栏
        disableDefaultUI: true
      })

      // 添加标记
      new google.maps.Marker({
        position: location,
        map
      })
    })
  }
</script>

<style lang="scss">
  .google-map {
    height: 100%;
  }
</style>

总结

Google Maps Platform Documentation | Maps JavaScript API 对于 JS 的集成方式介绍的还是非常详细的,如果有更细致需求,可以翻阅一下文档。

相关文章:

  • 历届蓝桥杯青少年编程选拔赛 科技素养题真题讲解 STEMA评测比赛真题解析【持续更新 已更新至18套】
  • 【Java面试宝典】线程安全问题|线程死锁的出现|线程安全的集合类
  • 【JAVA程序设计】基于SSH(非maven)便利店管理系统-有文档
  • mybatis-plus通用业务分页查询封装
  • 【毕业设计】 心血管疾病分析系统(医学大数据分析)
  • MyBatis学习(三)
  • 【数据挖掘】2022年2023届秋招知能科技公司机器学习算法工程师 笔试题
  • 基于Python的视频中的人脸识别系统设计与实现
  • MySQL主从复制详解
  • 【深度学习入门】- 用电路思想解释感知机
  • 文字生成图片
  • HTTPS的原理浅析与本地开发实践(下)
  • java-多态
  • 一、CSS文本样式[文本基础、文本样式、段落控制]
  • Nginx网络服务的配置
  • CSS相对定位
  • CSS中外联样式表代表的含义
  • golang 发送GET和POST示例
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • pdf文件如何在线转换为jpg图片
  • python 装饰器(一)
  • React Native移动开发实战-3-实现页面间的数据传递
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 删除表内多余的重复数据
  • 使用agvtool更改app version/build
  • 说说动画卡顿的解决方案
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • ![CDATA[ ]] 是什么东东
  • (C++)八皇后问题
  • (附源码)计算机毕业设计高校学生选课系统
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (太强大了) - Linux 性能监控、测试、优化工具
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • ./configure、make、make install 命令
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET Core 项目指定SDK版本
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .net 使用ajax控件后如何调用前端脚本
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .NET轻量级ORM组件Dapper葵花宝典
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • ::前边啥也没有
  • ?.的用法
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)
  • [20171113]修改表结构删除列相关问题4.txt
  • [2021ICPC济南 L] Strange Series (Bell 数 多项式exp)
  • [Angular] 笔记 6:ngStyle
  • [C# 开发技巧]实现属于自己的截图工具