首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >利用Geolocator和本地搜索的Google搜索

利用Geolocator和本地搜索的Google搜索
EN

Stack Overflow用户
提问于 2017-11-27 18:57:15
回答 1查看 229关注 0票数 0

我正在使用这个资源指南根据用户的IP地址:https://developers.google.com/maps/documentation/javascript/geolocation建立一个动态地图位置缺省值

我还想做的是将搜索词传递到这个API查询中,以便它为“指甲沙龙”生成结果。

我不知道该怎么做。有人有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-05 01:32:21

在您的例子中,我建议使用Google Places API。它可以很容易地实现与不同类型的应用程序。但是现在,我们将在web应用程序中使用它,并且我们将使用场所JavaScript库

首先,创建一个简单映射。您可以只复制代码这里。只需确保使用自己的API密钥即可。要了解有关如何创建简单地图的更多信息,可以检查快速入门

在加载Maps Javascript的脚本上,添加"libraries=places“。

库是一种代码模块,它为Maps JavaScript API提供了额外的功能,但是除非您特别请求,否则不会加载它们。

要了解更多关于Places的信息,您可以查看链接。您的脚本现在看起来如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places&callback=initMap" async defer></script>

我们需要得到您的当前位置,所以我们将使用地质化

地理定位是一种HTML5功能,它在谷歌地图上显示用户或设备的地理位置。

下面是地理定位的代码。它所做的是检查HTML5地理定位是否正确。如果是这样的话,我们将使用getCurrentPosition获取用户的当前坐标,以便以后使用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(function(position) {
          // add your map and Places API here.
        });
    } else {
      // Browser doesn't support Geolocation
    }
  }

getCurrentPosition是一种接受参数的方法。该参数返回一个具有凉爽属性的对象,如:纬度、经度。这些属性将在创建地图和位置API方面发挥重要作用。理想的做法是创建一个可变对象,然后将其用于获取的坐标。就像这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var coordinatesObj = {
   lat: position.coords.latitude,
   lng: position.coords.longitude
};

然后将其用于映射的'center'属性。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 map = new google.maps.Map(document.getElementById('map'), {
       center: coordinatesObj,
       zoom: 14
 });

创建一个变量'service'。在这个变量中,我们将创建一个新的PlacesService实例。该对象接受一个参数,即映射ID。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var service = new google.maps.places.PlacesService(map);

使用Place服务,您可以执行四种类型的搜索:

  • 附近的搜索根据用户的位置返回附近位置的列表
  • 文本搜索根据搜索字符串返回附近位置的列表,例如。“比萨”
  • 雷达搜索(不推荐)返回指定搜索半径内的大量位置列表,但其细节小于附近搜索或文本搜索。
  • Place Details请求返回有关特定位置的更详细信息,包括用户评论。

在您的例子中,附近搜索似乎是最好的选择。

附近的搜索允许您按关键字或类型搜索指定区域内的位置。

附近的搜索是通过调用PlacesService的nearbySearch()方法来启动的,该方法将返回一个PlaceResult对象数组。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
service.nearbySearch({
  location: , // place the coordinates here
  radius: 500,
  type: ['beauty_salon']
}, callback);

'location'属性上,使用我们从地理位置的方法中获得的坐标。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
service.nearbySearch({
 location: coordinatesObj,
 radius: 500,
 type: ['beauty_salon']
}, callback);

请注意,当使用'location'时,您需要添加一个'radius'属性,并提供一个500米到50000米的数字。要了解更多,检查这个文档将是非常有帮助的。

还必须将回调方法传递给nearbySearch(),以处理结果对象和google.maps.places.PlacesServiceStatus响应。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function callback(results, status) {
  if (status === google.maps.places.PlacesServiceStatus.OK) {
    for (var i = 0; i < results.length; i++) {
      createMarker(results[i]);
    }
  }
}

' status '是google.maps.places.PlacesServiceStatus.OK时,这个回调函数会添加一个标记。换句话说,如果状态成功的话。

您还将注意到createMarker()函数。该函数接受一个参数,并在返回的每个位置上创建一个标记。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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);
 });
}

您还会注意到这个google.maps.event.addListener。它使用映射响应用户事件,如鼠标或键盘事件。

这些事件看起来可能像标准的DOM事件,但它们实际上是Maps JavaScript API的一部分。由于不同的浏览器实现不同的DOM事件模型,Maps JavaScript API提供了这些机制来侦听和响应DOM事件,而不需要处理各种跨浏览器的特性。这些事件通常还会在事件中传递参数,指出某些UI状态(例如鼠标位置)。要了解更多信息,您可以查看事件

还有一件事,目前我们还没有'nail_salon'.类型这就是为什么我们在类型属性中使用的原因。有关受支持类型的列表,您可以检查场所类型以了解更多信息。

奖金:

InfoWindow在地图上方的弹出式窗口中显示特定位置的内容(通常是文本或图像)。信息窗口有一个内容区域和一个锥形阀杆。茎尖连接到地图上的指定位置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var infowindow = new google.maps.InfoWindow();

以下是整个代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
      // Note: This example requires that you consent to location sharing when
      // prompted by your browser. If you see the error "The Geolocation service
      // failed.", it means you probably did not give permission for the browser to
      // locate you.
      var map, infowindow;
      function initMap() {
        // Try HTML5 geolocation.
        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(function(position) {
                var coordinatesObj = {
                    lat: position.coords.latitude,
                    lng: position.coords.longitude
                };
                map = new google.maps.Map(document.getElementById('map'), {
                  center: coordinatesObj,
                  zoom: 14
                });
                infowindow = new google.maps.InfoWindow();
                var service = new google.maps.places.PlacesService(map);
                service.nearbySearch({
                    location: coordinatesObj,
                    radius: 500,
                    type: ['beauty_salon']
                }, callback);
            });
        } else {
          // Browser doesn't support Geolocation
        }
      }
      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);
        });
      }
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#map {
        height: 100%;
}
      /* Optional: Makes the sample page fill the window. */
html, body {
        height: 100%;
        margin: 0;
        padding: 0;
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div id="map"></div>
<script async defer
    src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCzjs-bUR6iIl8yGLr60p6-zbdFtRpuXTQ&libraries=places&callback=initMap">
    </script>

就这样!

希望这有助于和快乐的编码!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47523236

复制
相关文章
Ruby On Rails 4 hello world,Ruby On Rails上手
有机会再试一试Rails了,仅仅是原来接触的是2,如今已然变成了4,似乎如今的安装比原来会快些。。
全栈程序员站长
2022/07/12
2.5K0
Ruby On Rails 4 hello world,Ruby On Rails上手
使用rvm在Mac中安装ruby和rails
MacOS默认安装的是ruby 1.8.7,如果你想使用ruby 1.9.2的话,除了在官网下载源码编译安装外,可以使用rvm来协助安装。
EltonZheng
2021/01/22
3.2K0
Ruby on Rails 基础(11)
启动浏览器,可以进行访问 ---- 命令汇总 gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 curl -sSL https://get.rvm.io | bash -s stable rvm list known rvm list rvm install 2.3 ruby -v gem -v sqlite3 --version gem source -l time
franket
2021/11/25
1K0
Ruby on Rails 基础(1)
这两条编码哲学可以算是历代猴子们的智慧结晶,核心目标只有一个,最大化的减少代码规模,明确核心逻辑,而这样的好处是多多的(编码效率高,Debug也快)
franket
2021/11/25
1.2K0
Ruby on Rails 基础(8)
文件/文件夹 作用 app/ 存放程序的控制器、模型、视图、帮助方法、邮件和静态资源文件。本文主要关注的是这个文件夹。 bin/ 存放运行程序的 rails 脚本,以及其他用来部署或运行程序的脚本。 config/ 设置程序的路由,数据库等。详情参阅 “设置 Rails 程序” 一文。 config.ru 基于 Rack 服务器的程序设置,用来启动程序。 db/ 存放当前数据库的模式,以及数据库迁移文件。 Gemfile, Gemfile.lock 这两个文件用来指定程序所需的 gem 依赖件,用于 Bun
franket
2021/11/25
1.9K0
如何在Ubuntu 18.04上使用RVM安装Ruby on Rails
Ruby on Rails是一个流行的Web应用程序框架,旨在帮助您开发成功的项目,同时编写更少的代码。为了使Web开发变得有趣并且受到强大社区的支持,Ruby on Rails是一个可以免费使用的开源软件,并且欢迎各位用户提出建议以使其更好。
独钓寒江雪_Ly
2018/10/10
8.9K0
Ruby on Rails 基础(2)
RVM (Ruby Version Manager) 是一个 CLI 工具,可以用来对 ruby 的多个版本进行安装,隔离和管理
franket
2021/11/25
8490
Ruby on Rails 基础(1)
这两条编码哲学可以算是历代猴子们的智慧结晶,核心目标只有一个,最大化的减少代码规模,明确核心逻辑,而这样的好处是多多的(编码效率高,Debug也快)
franket
2021/11/25
1.2K0
Ruby on Rails 基础(3)
查看可用ruby版本 [root@h202 ruby]# rvm list known -bash: rvm: command not found [root@h202 ruby]# su - root [root@h202 ~]# cd ruby/ [root@h202 ruby]# rvm list known # MRI Rubies [ruby-]1.8.6[-p420] [ruby-]1.8.7[-head] # security released on head [ruby-]1.9.1[-p
franket
2021/11/25
1.2K0
Ruby on Rails 基础(4)
安装Rails 检查环境 检查以下三个软件,确保已经安装 [root@h202 ruby]# ruby -v ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux] [root@h202 ruby]# gem -v 2.5.1 [root@h202 ruby]# sqlite3 --version 3.6.20 [root@h202 ruby]# ---- 替换安装源 如果不替换源,会很慢,或者根本没法获取包,因为有墙 [root@h202 rub
franket
2021/11/25
1.2K0
如何在Ubuntu 18.04上使用rbenv安装Ruby on Rails
Ruby on Rails是创建网站和Web应用程序的开发人员最受欢迎的应用程序堆栈之一。Ruby编程语言与Rails开发框架相结合,使应用程序开发变得简单。
司徒永哥
2018/10/10
6.4K0
如何在Ubuntu 14.04上使用PostgreSQL和Ruby on Rails应用程序
Ruby on Rails使用sqlite3作为其默认数据库,在许多情况下效果很好,但可能不适合您的应用程序。如果您的应用程序需要客户端/服务器SQL数据库(如PostgreSQL或MySQL)提供的可伸缩性,集中化和控制(或任何其他功能),则需要执行一些其他步骤才能启动并运行它。
温浪
2018/10/22
3.4K0
Ruby on Rails 基础(7)
Note: bundle install 过程中有一个警告,让我们不要使用 root,这样会让其它用户无法操作此应用,其实还有一定安全隐患,这里为图方便,只为了解功能就不去讲究这些了,生产环境下要非常注意 Don’t run Bundler as root. Bundler can ask for sudo if it is needed, and installing your bundle as root will break this application for all non-root user
franket
2021/11/25
1K0
Ruby on Rails 基础(9)
报错:There was an error while trying to load the gem 'uglifier'. (Bundler::GemRequireError)
franket
2021/11/25
9440
Ruby on Rails 基础(6)
没有创建成功,但是反馈结果却是成功 (说明这是一批命令,最后一个反馈结果正常),并且生成一个文件目录
franket
2021/11/25
1.7K0
Ruby on Rails 基础(1)
这两条编码哲学可以算是历代猴子们的智慧结晶,核心目标只有一个,最大化的减少代码规模,明确核心逻辑,而这样的好处是多多的(编码效率高,Debug也快)
franket
2021/11/25
6410
如何在Ubuntu 14.04上使用MySQL和Ruby on Rails应用程序
Ruby on Rails使用sqlite3作为其默认数据库,在许多情况下效果很好,但可能不适合您的应用程序。如果您的应用程序需要客户端/服务器SQL数据库(如PostgreSQL或MySQL)的可伸缩性,集中化和控制(或任何其他功能),则需要执行一些额外的步骤才能启动并运行它。
信姜缘
2018/10/22
4.9K0
RoR:Ruby On Rails 的 Web Service
3.c:\flexstore\ruby script/generate model product
用户3135539
2018/09/12
9430
如何在Debian 8上使用RVM安装Ruby on Rails
Ruby on Rails是创建网站和Web应用程序的开发人员最受欢迎的应用程序框架之一。Ruby编程语言与Rails开发框架相结合,使应用程序开发变得简单。
好烟
2018/07/26
5.1K0
RubyMine 2023 Ruby和Rails集成开发环境
RubyMine 2023.1 包含 Rails 7 和 Ruby 3.2 支持、新 UI 更新、更快的代码补全、更少的内存消耗、WSL 上改进的 gem 同步、更便捷的导航、在 RSpec 中使用共享上下文和示例的功能,以及增强的 Docker 集成。
用户10121095
2023/04/02
1.3K0

相似问题

使用Ruby、Rails和.gsub删除双引号

10

从rails中的ruby循环中删除双引号

12

删除ruby中哈希值中的双引号

11

如何在ruby on rails中通过查询添加和删除关系

20

如何删除字符串ruby on rails中的双引号?

19
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文