开发者问题收集

无法读取未定义的属性(读取地图)

2022-01-12
4447

我想用 Google 的 DinstanceMatrixService 测量多个点之间的距离,但出现以下错误:

在此处输入图片描述

我多次使用了 google.maps... ,但出现 google 未定义的错误。我在网上搜索并发现,如果我在 google.maps... 前面输入 window 它应该可以工作,但是它不工作

function calculate_furthest_point() {
  var origin1 = new window.google.maps.LatLng(46.754516, 23.596608);
  var origin2 = new window.google.maps.LatLng(46.753906, 23.582223);
  var destinationA = new window.google.maps.LatLng(46.751362, 23.594867);
  var destinationB = new window.google.maps.LatLng(46.754986, 23.592378);

  var service = new window.google.maps.DistanceMatrixService();
  service.getDistanceMatrix(
    {
      origins: [origin1, origin2],
      destinations: [destinationA, destinationB],
      travelMode: "DRIVING",
      transitOptions: TransitOptions,
      drivingOptions: DrivingOptions,
      unitSystem: UnitSystem,
      avoidHighways: Boolean,
      avoidTolls: Boolean,
    },
    callback
  );

  // callback()

  function callback(response, status) {
    if (status == "OK") {
      var origins = response.originAddresses;
      var destinations = response.destinationAddresses;

      for (var i = 0; i < origins.length; i++) {
        var results = response.rows[i].elements;
        for (var j = 0; j < results.length; j++) {
          var element = results[j];
          var distance = element.distance.text;
          var duration = element.duration.text;
          var from = origins[i];
          var to = destinations[j];
          console.log(
            "DISTANCE : " + distance + " FROM: " + from + " TO: " + to
          );
        }
      }
    } else console.log("ERROR");
  }
}

和我的导入:

import logo from "./logo.svg";
import "./App.css";
import {
  GoogleMap,
  useLoadScript,
  Marker,
  InfoWindow,
} from "@react-google-maps/api";
import { useEffect } from "react";

import { initializeApp } from "firebase/app";
import {
  getDatabase,
  ref,
  set,
  onValue,
  get,
  child,
  database,
  DataSnapshot,
} from "firebase/database";

我正在使用 react-google-maps

3个回答

在使用 window.google 之前,您可能需要加载事件。

来自文档: 如果您需要访问地图对象,而不是 ref prop,则需要在组件上使用 onLoad 回调。

https://www.npmjs.com/package/@react-google-maps/api

Mino mnz
2022-01-12

在某些时候,这个东西是 未定义 的,所以我的建议是把 qm(?) 放在 window.google 之后, var service = new window.google?.maps.DistanceMatrixService();

Dobromir Kirov
2022-01-12

如果您在模块中将库用作导入,则将无法访问 window.google 。如果您在模块外调用函数 calculate_furthest_point ,则应在 <head> 标记中 添加 Google Map 脚本:

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

否则,您应该导入并使用 @react-google-maps 包中的方法。

Georgy
2022-01-12