Google Maps API:设置回调以添加标记/折线

2023-12-11

我正在尝试向生成的 Google 地图添加一条折线。折线的坐标是使用 jQuery(getJSON 函数)从我的 Web 服务器上的 JSON 文件中获取的。但是,我在回调方面遇到了麻烦。我在一个单独的 JavaScript 文件中定义了三个函数,它们是:

function initMap(callback) {

    map = new google.maps.Map(document.getElementById('map-canvas'), {
        center: {lat: 34.397, lng: 150.644},
        scrollwheel: false,
        zoom: 2
    });

    callback();
}

.

function setPath(callback) {

   $.getJSON('./expOneActivityData.json',

       function (data) {

           //Some looping contstruct to navigate through my JSON file.   
       }
   })

   callback();
};

.

function addPath() {

    var trekLine = new google.maps.Polyline({

        path: expeditionCoordinates,
        geodisc: true,
        stokeColor: '#FF0000',
        strokeOpacity: 1.0,
        strokeWeight: 2
    });

    trekLine.setMap(map);

}

expeditionCoordinates 是一个数组,每个元素都是一个具有纬度和经度属性的对象。这被声明为全局变量,值初始化发生在 setPath() 的循环中。

在我的 HTML 文件中,我有:

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

当我尝试在脚本标记中将 initMap 替换为 initMap(setPath(addPath)) 时,我收到来自 Google 的 400 Bad 请求。当然,在脚本标签中只包含“callback=initMap”会给出:

TypeError: callback is not a function

与 initMap 定义中的callback() 一致发生。

那么如何将函数传递给 googleapis,其中函数本身也有回调呢? (顺便说一句,我的循环构造很好)。我尝试将“defer”添加到 googleapi 脚本标记以及链接到我的 JavaScript 文件的标记中。我删除了所有回调内容,只执行了循环。我希望 expeditionCoordinates 数组能够在执行 googleapi 脚本标记之前完成初始化,尽管这也不起作用(地图仍然加载,只是没有折线)。

我对 Javascript 相当陌生,它是异步的,尽管我确实了解它们是如何工作的,并且已经在基础水平上成功地使用了它们一周左右的时间。

(这实际上让我想到了一个附带问题。到目前为止,我只使用过一个回调。我期望类似的内容:

initMap(setPath)

因为 setPath 在其定义作为参数传递时没有附加 () ,因此不会立即执行。虽然向 setPath 添加一组括号,因为它也需要回调(addPath),但这意味着它确实会立即执行?)


提供的示例存在几个问题:

1)加载Google Maps API时,callback参数接受 打回来函数名其中函数本身应该具有 以下签名:

function initMap() {
   //...
}

where

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

只有无参数回调函数可以这样指定。

2)自从jQuery.getJSON() is async默认情况下,您正在传递函数回调,即setPath函数应该是这样的:

function setPath(callback) {
    $.getJSON('./expOneActivityData.json',
        function (data) {
            callback(data);
        }
    );
};

工作示例

function initMap() {
    var map = new google.maps.Map(document.getElementById('map-canvas'), {
        center: { lat: 34.397, lng: 150.644 },
        scrollwheel: false,
        zoom: 2
    });

    setPath(function(data) {
        addPath(map,data);
    });
}

function setPath(callback) {
    $.getJSON('https://gist.githubusercontent.com/vgrem/91ba4d694157169b112c/raw/5bdd81c6f5bdfa5ba2d0ca8d5494129b329399d8/expOneActivityData.json',
        function (data) {
            callback(data);
        }
    );
};


function addPath(map,expeditionCoordinates) {
    var trekLine = new google.maps.Polyline({
        path: expeditionCoordinates,
        geodisc: true,
        stokeColor: '#FF0000',
        strokeOpacity: 1.0,
        strokeWeight: 2
    });
    trekLine.setMap(map);
}
html, body {
    height: 100%;
    margin: 0;
    padding: 0;
}

#map-canvas {
    height: 100%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<div id="map-canvas"></div>
<script src="https://maps.googleapis.com/maps/api/js?libraries=places&callback=initMap"
            async defer></script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google Maps API:设置回调以添加标记/折线 的相关文章

随机推荐

  • 使用 RODBC 将 SQL 存储过程结果转换为 data.frame 格式

    我正在使用 RODBC 包在 SQL 服务器中查询结果 我编写了一个特定的存储过程 当在我的 SQL Server 管理中执行时 studio 例如 返回一个表 但是 当我通过 R 运行查询时 它返回character 0 Execute
  • 如何从响应正文获取数据[重复]

    这个问题在这里已经有答案了 我现在正在使用 Java 中的 Youtube API 并设法将一些数据存储为CommentThreadListResponse 这是其节点的示例 但列表包含大约 100 个节点 snippet topLevel
  • 更改 WPF DatePicker 的字符串格式

    我需要更改 WPF 工具包 DatePicker 中 DatePickerTextBox 的字符串格式 以使用连字符而不是斜杠作为分隔符 有没有办法覆盖这个默认区域性或显示字符串格式 01 01 2010 我在这段代码的帮助下解决了这个问题
  • 如何使用Power Point VBA代码从文本文件中逐行读取行?

    此代码将从文本文件中读取一行 set file CreateObject Scripting FileSystemObject OpenTextFile c number txt 1 text file ReadLine MsgBox te
  • 将数据流式传输到基于 Web 的(角度)前端的现代方法

    tldr 我想建立一个带有实时显示数据的节点后端的角度应用程序 数据流的源是kafka流 其数据存储在postgres数据库中 我对某些主题很陌生 但有信心可以启动并运行它 但很可能不是以 最佳实践 方式 我无法弄清楚什么是现代且有效的方法
  • 常数的大O表示法

    我计算出我的运行时复杂度是4 这个的大O表示法是什么 例如 如果我的运行时复杂度是4 n那么它的大O O n 让我们宽松地看一下我们所说的定义f n is in O g n f n is in O g n 意思是c g n 是上界f n 于
  • 我如何要求对泛型类型的引用可以与泛型类型进行比较以确保相等?

    我正在尝试实现一种依赖于模幂的算法 我找不到任何适用于本机类型的模幂结构 例如u64 仅适用于 bigint 所以我想我应该编写一个标准重复平方法模幂 这是我想出的 fn powm base u64 exponent u64 modulus
  • FQL 中 CONTAINS() 的文档?

    最近有several 问题 posted在 Facebook SO 上使用CONTAINS in the WHERE条款 它的工作原理似乎类似于 Graph API 搜索功能 并且充当索引字段 对于 FQL 开发人员来说 这一切都是伟大的事
  • 如何在静态库中包含静态库?

    我在两个不同的文件夹中有 2 个静态库 libA and libB libB必须包括libA 我的主要 CMakeLists txt 是 add subdirectory libA add subdirectory libB 我的第一个错误
  • UITableViewCell 分组样式中的方形而不是圆角

    我希望分组的表格视图单元格具有方角 而不是默认的圆角 而且我不仅仅想使用图像来实现这种效果 是否可以 最简单的是 在你的tableView cellForRowAtIndexPath use cell backgroundView UIVi
  • PHP 和 FFMPEG - 执行智能视频转换

    我有一项异常困难的任务要执行 我以为这很容易 但我的所有努力都没有结果 我正在将上传到 php 脚本的视频从各种格式 avi mpg wmv mov 等 转换为单一 flv 格式 转换效果很好 但我遇到的问题是视频的分辨率 这是我当前正在运
  • 覆盖 WPF 模板时,是否必须单独覆盖每个主题的模板?

    我需要更改 WPF ComboBox 模板的一小部分 如果我复制 Luna 主题的现有模板并进行更改 那么最初一切都会正常工作 但如果用户有不同的主题 我的ComboBox保留了它的自定义主题 这显然是基于 Luna 所以看起来不合适 有没
  • 如何使用谓词从核心数据中获取偶数和奇数值

    我想从我的核心数据实体中获取偶数和奇数值 请查看下面的代码并进行更正 因为它会使应用程序崩溃 NSPredicate predicate if leadFilter rank isEqualToString Even predicate N
  • 在 Delphi 中为 MySQL 创建 UDF

    如何使用 Delphi 创建 MySQL 的 UDF 有人有代码模板吗 我希望将代码模板集成到 Delphi 版本 2007 及更高版本 中 因此我需要这些模板在有或没有 Unicode 支持的情况下都可以使用 首先 谷歌透露 文档 论坛主
  • 如何在 JavaScript 中将哈希值转换为单个对象?

    我有一个以下格式的对象数组 var log billkey Name billvalue ABC billkey Department billvalue Computer 我想将其转换为单个对象 例如 var log Name ABC D
  • Rails 3 提交标签 + html_safe

    这行代码有什么问题吗 这实际上产生 显然我的 html safe 调用没有做任何事情 背景 我在用着推特引导程序也字体真棒我本质上是想实现一个带有图标的提交按钮 为了扩展卢卡斯的答案 我需要一个按钮标签而不是输入 这段代码产生了我想要的效果
  • Maven 无法解决本地依赖关系

    我有一个 Maven 项目 其中包含一个带有外部 jar 文件的项目内存储库 我使用 install 命令将 jar 文件安装到项目内存储库中 当我检查存储库时 jar 文件已安装 我还在pom文件中添加了依赖配置 但是当我运行 mvn 编
  • 用 Dotrine 查询语言写“NOT IN”

    我有两张桌子company id and company has wtax company id 我需要获取所有不在其中的公司company has wtax桌子 原始 SQL 应该是这样的 SELECT id FROM company L
  • 如何在字典列表上动态构建分组依据

    我正在尝试对 IEnumerable 执行 groupby 问题是我在编译时不知道我想要对哪些字段进行分组 我已经发现另一个帖子在堆栈上解释了当类已知并且具有属性时如何执行此操作 但就我而言 我正在处理字典 并且键也仅在运行时已知 我的代码
  • Google Maps API:设置回调以添加标记/折线

    我正在尝试向生成的 Google 地图添加一条折线 折线的坐标是使用 jQuery getJSON 函数 从我的 Web 服务器上的 JSON 文件中获取的 但是 我在回调方面遇到了麻烦 我在一个单独的 JavaScript 文件中定义了三