谷歌地图API地理定位+雷达地点搜索

2023-12-03

我正在尝试使用谷歌地图 API 中的地理位置和地点来显示地图(在我的位置)以及我周围最近的地点。这两个示例单独工作,但不能一起工作。

谁能告诉我为什么会有问题?我是否用另一个地图覆盖了地图或做其他错误的事情?

    <script type="text/javascript"
      src="https://maps.googleapis.com/maps/api/js?v=3.exp&key=AIzaSyA93l5zPyIvGB7oYGqzLSk28r5XuIs2Do8
&sensor=true&libraries=places"></script>

    <script>
var map;
var service;
var marker;
var pos;


function initialize() {

  var mapOptions = {
    zoom: 15
  };
  map = new google.maps.Map(document.getElementById('map-canvas'),
      mapOptions);

  // Try HTML5 geolocation
  if(navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
      pos = new google.maps.LatLng(position.coords.latitude,
                                       position.coords.longitude);


      var infowindow = new google.maps.InfoWindow({
        map: map,
        position: pos,
        content: 'Located'
      });

      map.setCenter(pos);
    }, function() {
      handleNoGeolocation(true);
    });
  } else {
    // Browser doesn't support Geolocation
    handleNoGeolocation(false);
  }

  var request = {
      location:pos,
      radius:500,
      types: ['store']
  };

  infowindow = new google.maps.InfoWindow();
  var service = new google.maps.places.PlacesService(map);
  service.nearbySearch(request,callback);

  function callback(results, status) {
  if (status == google.maps.places.PlacesServiceStatus.OK) {
    for (var i = 0; i < results.length; i++) {
      createMarker(results[i]);
    }
  }
}
}

function createMarker(place) {
  var placeLoc = place.geometry.location;
  var marker = new google.maps.Marker({
    map: map,
    position: place.geometry.location
  });

  google.maps.event.addListener(marker, 'click', function() {
    infowindow.setContent(place.name);
    infowindow.open(map, this);
  });
}

function handleNoGeolocation(errorFlag) {
  if (errorFlag) {
    var content = 'Error: The Geolocation service failed.';
  } else {
    var content = 'Error: Your browser doesn\'t support geolocation.';
  }

  var options = {
    map: map,
    position: new google.maps.LatLng(60, 105),
    content: content
  };

  var infowindow = new google.maps.InfoWindow(options);
  map.setCenter(options.position);
}

google.maps.event.addDomListener(window, 'load', initialize);
    </script>

EDIT

现在移动了代码,所以它看起来像 - 尚未修复位置未定义的问题。

if(navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {

        var request = {
      location:pos,
      radius:500,
      types: ['store']
  };

  infowindow = new google.maps.InfoWindow();
  var service = new google.maps.places.PlacesService(map);
  service.nearbySearch(request,callback);
      pos = new google.maps.LatLng(position.coords.latitude,
                                       position.coords.longitude);


      var infowindow = new google.maps.InfoWindow({
        map: map,
        position: pos,
        content: 'Located'
      });

      map.setCenter(pos);
    }, function() {
      handleNoGeolocation(true);
    });'

由于异步调用navigator.geolocation.getCurrentPosition()立即返回,location请求的属性未定义。拨电至

service.nearbySearch(request,callback);

抱怨位置丢失。这是真的,因为pos此时尚未设置。

您必须移动这部分代码:

        var request = {
            location:pos,
            radius:500,
            types: ['store']
        };

        infowindow = new google.maps.InfoWindow();
        var service = new google.maps.places.PlacesService(map);
        service.nearbySearch(request,callback);

to

    navigator.geolocation.getCurrentPosition(function(position) {
    ...
            map.setCenter(pos);

并设置变量infoWindow global.

这已更改initialize()功能:

var map;
var service;
var marker;
var pos;
var infowindow;


function initialize() {

    var mapOptions = {
        zoom: 15
    };

    map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
    console.log(map);

    // Try HTML5 geolocation
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(function(position) {
            pos = new google.maps.LatLng(position.coords.latitude,
                                         position.coords.longitude);

            infowindow = new google.maps.InfoWindow({
                map: map,
                position: pos,
                content: 'Located'
            });

            map.setCenter(pos);

            var request = {
                location:pos,
                radius:500,
                types: ['store']
            };

            infowindow = new google.maps.InfoWindow();
            var service = new google.maps.places.PlacesService(map);
            service.nearbySearch(request,callback);
        }, function() {
            handleNoGeolocation(true);
        });
    } else {
        // Browser doesn't support Geolocation
        handleNoGeolocation(false);
    }

    function callback(results, status) {
        if (status == google.maps.places.PlacesServiceStatus.OK) {
            for (var i = 0; i < results.length; i++) {
                console.log('after / to createMarker');
                createMarker(results[i]);
            }
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

谷歌地图API地理定位+雷达地点搜索 的相关文章

随机推荐

  • 动态 jQuery 使用基于元素的 AddMethod 验证错误消息

    假设我有一个自定义的 jQuery Validate AddMethod 如下所示 validator addMethod min length function val element do stuff the error message
  • 从 SQL 错误消息 547 获取特定信息

    如何从 547 号 SQL 错误消息中正确提取特定信息 所需信息 表名 约束名称 列名 Code Try Catch ex As System Data SqlClient SqlException If ex Number 547 The
  • PyQt:keyPressEvent 和 keyReleaseEvent - 按住不反弹

    我想实施一个QDialog 其中按下某个键一段时间 秒 然后释放 我尝试这样做keyPressEvent and keyReleaseEvent功能 我遇到的问题是 当按下一个键时 防抖 keyReleaseEvent 发生得非常快 这在我
  • 在javascript中拖动光标?

    我需要在某些地方设置拖动光标 但我看不到这里列出的http www w3schools com cssref pr class cursor asp 就我而言 当我拖动一些图像时它会出现 http s2 subirimagenes com
  • XSD to Java,指定使用Java HashMap

    我正在尝试从 XSD 模式生成一些 Java 类 我确切地知道我想用 Java 生成什么 并且我正在尝试编写相应的 XSD 模式 我需要表示一个java util HashMap HashMap 我找不到如何在 XSD 架构 或 xjb 绑
  • 我无法显示我的字体很棒的图标。尝试使用多种方法导入css

    我正在使用 HTML 模板构建一个网站组合 我对 css 没有太多经验 但是在我的 django 项目中将 font awesome css 文件作为链接和文件导入后 图标显示为小框 我知道 css 文件正在被识别 因为当我将其注释掉时 这
  • Matplotlib 投影去除边距

    这是一张美国县的图像 创建于 ax plt axes projection ccrs LambertConformal ax set extent 120 70 20 50 ccrs Geodetic 在 实时 图中可以看到plt show
  • 如何获取 django ORM 中某个字段的所有值?

    我有一张桌子叫user info 我想获取所有用户的姓名 所以表中有一个字段叫做name 所以在 sql 中我做了类似的事情 SELECT distinct name from user info 但我不知道如何在 django 中做同样的
  • 如何从服务访问应用程序参数?

    从我的控制器中 我访问应用程序参数 位于 app config with this gt container gt getParameter my param 但我不知道如何从服务访问它 我想我的服务类不应该扩展Symfony Bundle
  • 在 MacOS 中生成 .Net Core Soap Webservices 代理

    我看过一个 C 教程 其中讲师使用以下命令生成代理 添加参考 但他使用的是Windows电脑 我正在使用 Mac 并且正在努力使用相同的方法生成 Web 服务的代理 它使用以下命令生成文件 系统 Web 服务 Net Core 中不存在的包
  • 如何在 Blazor 中创建良好的自定义 DropDownList / ComboBox 项?

    我想在我的 Blazor Server App 上使用多个 ComboBox Styled Items 我的工作代码如下所示 page dropdownlist h3 DropDownList ComboBox h3
  • 在 C 中动态初始化字符串数组

    我知道我可以这样初始化字符串数组 static const char BIN ELEMENTS 5 0000 0 0 0001 0 1 0010 0 2 0011 0 3 0100 0 4 但我需要以动态的方式实现这一点 从文件中读取字符
  • 每年熊猫高效分组季节

    我有一个多年时间序列 想要确定 95 的数据所在的界限 我想按一年中的季节 DJF MAM JJA SON 查看此内容 我尝试过以下操作 import pandas as pd import numpy as np FRAC 2 TAIL
  • Android WebView 硬件加速键盘故障

    当 WebView 进行硬件加速时 单击输入字段会导致键盘出现 并且 html 会重新绘制 移动并复制一段时间 1 当软键盘出现时 WebView 将其内容平移到左下角 然后再次平移到正常位置 导致短暂的可见重复 2 更改键盘时 例如 ab
  • 在delphi中获取互联网时间

    我想从互联网获取时间和日期 我用了下面的代码 IdDayTime1 ReadTimeout 5000 IdDayTime1 Host www time windows com IdDayTime1 Port 37 Label1 Captio
  • 指向任意类型(或任何其他模板类)的 std::vector 的指针

    假设我想要一个指向 std vector 的指针的成员变量 但我不想指定它存储的变量类型 我只想访问那些独立于其实际泛型类型的函数 这可以用c 实现吗 像这样的东西 class Foo public void setVec std vect
  • 我应该从 main() 返回 EXIT_SUCCESS 还是 0?

    这是一个简单的问题 但我不断看到相互矛盾的答案 C 程序的主例程是否应该返回0 or EXIT SUCCESS include
  • 如果订单中的产品属于 WooCommerce 中的某个类别,如何自动创建帐户

    我有一家 WooCommerce 商店 顾客以客人身份结账 我现在想出售一些虚拟产品 在这种情况下我想自动创建一个帐户 所以我有两个工作代码片段 用于检查购物车中的产品是否属于特定类别 在线 一种是从客人结账时自动创建帐户 但我不知道如何将
  • QML 加载并显示具有颜色属性的 .ply 网格

    我正在尝试使用 QML 从斯坦福 PLY 文件加载一个带有每个顶点颜色信息的简单立方体 我的实体看起来像这样 Entity id circle property Material materialPoint Material effect
  • 谷歌地图API地理定位+雷达地点搜索

    我正在尝试使用谷歌地图 API 中的地理位置和地点来显示地图 在我的位置 以及我周围最近的地点 这两个示例单独工作 但不能一起工作 谁能告诉我为什么会有问题 我是否用另一个地图覆盖了地图或做其他错误的事情