使用 Google maps API 和 Google text Search 进行地理定位

Posted

技术标签:

【中文标题】使用 Google maps API 和 Google text Search 进行地理定位【英文标题】:Geolocation with Google maps API and Google text Search 【发布时间】:2015-02-24 21:01:09 【问题描述】:

我是从 VB 转换的 javascript 新手。这是我第一次尝试创建动态谷歌地图,最终尝试使用用户位置生成谷歌地图并应用地点搜索体育商店。目前我的地图生成并缩放到我的位置,但不应用带有标记的搜索结果。 这是我的代码:

<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?libraries=places"></script>

    <article>
      <p>Finding your location: <span id="status">checking...</span></p>
    </article>
<script>
function success(position) 
  var s = document.querySelector('#status');
  
  if (s.className == 'success') 
    // not sure why we're hitting this twice in FF, I think it's to do with a cached result coming back    
    return;
  
  
  s.innerhtml = "found you!";
  s.className = 'success';
  
  var mapcanvas = document.createElement('div');
  mapcanvas.id = 'mapcanvas';
  mapcanvas.style.height = '400px';
  mapcanvas.style.width = '560px';
    
  document.querySelector('article').appendChild(mapcanvas);


  
  var latlng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
  var myOptions = 
    zoom: 10,
    center: latlng,
    mapTypeControl: false,
    navigationControlOptions: style: google.maps.NavigationControlStyle.SMALL,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  ;
map = new google.maps.Map(document.getElementById("mapcanvas"), myOptions);
  var service;
  var infowindow;
 var request = 
    location: latlng,
    radius: '3200',
    query: 'sports'
  ;

  service = new google.maps.places.PlacesService(map);
  service.textSearch(request, callback);


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


function error(msg) 
  var s = document.querySelector('#status');
  s.innerHTML = typeof msg == 'string' ? msg : "failed";
  s.className = 'fail';
  
  // console.log(arguments);


if (navigator.geolocation) 
  navigator.geolocation.getCurrentPosition(success, error);
 else 
  error('not supported');


</script>

我觉得我可能遗漏了一些 var 分配,或者没有从“地图画布”重写当前地图。有没有人创造了类似的东西来提供一些见解?非常感谢任何帮助,以找出为什么我的搜索结果不会显示在地图上。谢谢!

【问题讨论】:

查询响应是什么样的?请提供一个Minimal, Complete, Tested and Readable example,以证明您在问题本身中的问题。使用posted code,我得到“查找您的位置:失败” @geocodezip 我得到的回复可以在页面底部的Code Example 找到。 我也收到“查找您的位置:失败”。无法使用您的示例调试实际问题。 @geocodezip 这一定是您浏览器上的设置,我刚刚检查了两种状态的当前输出,一旦授予位置访问权限,它就可以工作。这是一个指向我抛出的页面的链接,以将输出显示为图像。 see current map 这绝对是我浏览器的设置。我否认地理位置。 【参考方案1】:

您的代码有效,但您缺少createMarker 函数。这不是 API 方法。

Uncaught ReferenceError: createMarker is not defined

createMarker 函数示例:

function createMarker(place) 

    new google.maps.Marker(
        position: place.geometry.location,
        map: map
    );

注意:如果您只需要该函数中的位置,您也可以这样调用并修改它:

function callback(results, status) 
    if (status == google.maps.places.PlacesServiceStatus.OK) 
        for (var i = 0; i < results.length; i++) 
            var place = results[i];
            console.log(place);
            createMarker(results[i].geometry.location); // pass only the location to createMarker
        
    


function createMarker(position) 

    new google.maps.Marker(
        position: position,
        map: map
    );

JSFiddle demo

【讨论】:

太棒了!如果有帮助,请不要忘记接受/赞成这个答案。 只要我能做到,我很乐意。我的代表是 9 岁,需要 15 岁。

以上是关于使用 Google maps API 和 Google text Search 进行地理定位的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 Google Maps API 请求在服务器上运行时不起作用

远程在 Firefox 中使用 Google Maps V3 时出现“未定义 google”

Google Maps V3:定期更新标记

Google Maps V3:定期更新标记

如何将自定义按钮添加到 react-google-maps?

PHP 使用Google Maps API获取纬度和经度