首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在laravel中使用google地图和mysql进行radius搜索

在Laravel中使用Google地图和MySQL进行半径搜索,可以通过以下步骤实现:

  1. 首先,确保你已经安装了Laravel框架,并创建了一个新的Laravel项目。
  2. 在Google Cloud平台上创建一个新的项目,并启用Google Maps JavaScript API和Places API。获取API密钥。
  3. 在Laravel项目的.env文件中配置Google Maps API密钥:
代码语言:txt
复制

GOOGLE_MAPS_API_KEY=your_api_key

代码语言:txt
复制
  1. 在Laravel项目中安装Guzzle HTTP客户端,用于发送HTTP请求:
代码语言:txt
复制

composer require guzzlehttp/guzzle

代码语言:txt
复制
  1. 创建一个新的控制器,例如MapController,并在其中编写以下代码:
代码语言:php
复制

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use GuzzleHttp\Client;

class MapController extends Controller

{

代码语言:txt
复制
   public function search(Request $request)
代码语言:txt
复制
   {
代码语言:txt
复制
       $address = $request->input('address');
代码语言:txt
复制
       $radius = $request->input('radius');
代码语言:txt
复制
       // 使用Google Geocoding API将地址转换为经纬度坐标
代码语言:txt
复制
       $client = new Client();
代码语言:txt
复制
       $response = $client->get('https://maps.googleapis.com/maps/api/geocode/json', [
代码语言:txt
复制
           'query' => [
代码语言:txt
复制
               'address' => $address,
代码语言:txt
复制
               'key' => config('app.google_maps_api_key'),
代码语言:txt
复制
           ],
代码语言:txt
复制
       ]);
代码语言:txt
复制
       $data = json_decode($response->getBody(), true);
代码语言:txt
复制
       $location = $data['results'][0]['geometry']['location'];
代码语言:txt
复制
       $latitude = $location['lat'];
代码语言:txt
复制
       $longitude = $location['lng'];
代码语言:txt
复制
       // 使用MySQL进行半径搜索
代码语言:txt
复制
       $results = DB::select(DB::raw('
代码语言:txt
复制
           SELECT *,
代码语言:txt
复制
               (6371 * acos(cos(radians(' . $latitude . ')) * cos(radians(latitude)) * cos(radians(longitude) - radians(' . $longitude . ')) + sin(radians(' . $latitude . ')) * sin(radians(latitude))))
代码语言:txt
复制
               AS distance
代码语言:txt
复制
           FROM locations
代码语言:txt
复制
           HAVING distance < ' . $radius . '
代码语言:txt
复制
           ORDER BY distance
代码语言:txt
复制
       '));
代码语言:txt
复制
       return response()->json($results);
代码语言:txt
复制
   }

}

代码语言:txt
复制

请注意,上述代码中的locations是你的MySQL数据库中存储位置信息的表名。

  1. 在路由文件中定义一个路由,将请求指向MapControllersearch方法:
代码语言:php
复制

Route::post('/search', 'MapController@search');

代码语言:txt
复制
  1. 创建一个包含Google地图和搜索表单的视图文件,例如search.blade.php
代码语言:html
复制

<html>

<head>

代码语言:txt
复制
   <title>Radius Search</title>
代码语言:txt
复制
   <script src="https://maps.googleapis.com/maps/api/js?key={{ config('app.google_maps_api_key') }}&libraries=places"></script>
代码语言:txt
复制
   <script>
代码语言:txt
复制
       function initMap() {
代码语言:txt
复制
           var map = new google.maps.Map(document.getElementById('map'), {
代码语言:txt
复制
               center: {lat: -34.397, lng: 150.644},
代码语言:txt
复制
               zoom: 8
代码语言:txt
复制
           });
代码语言:txt
复制
           var input = document.getElementById('address');
代码语言:txt
复制
           var searchBox = new google.maps.places.SearchBox(input);
代码语言:txt
复制
           map.addListener('bounds_changed', function() {
代码语言:txt
复制
               searchBox.setBounds(map.getBounds());
代码语言:txt
复制
           });
代码语言:txt
复制
           var markers = [];
代码语言:txt
复制
           searchBox.addListener('places_changed', function() {
代码语言:txt
复制
               var places = searchBox.getPlaces();
代码语言:txt
复制
               if (places.length === 0) {
代码语言:txt
复制
                   return;
代码语言:txt
复制
               }
代码语言:txt
复制
               markers.forEach(function(marker) {
代码语言:txt
复制
                   marker.setMap(null);
代码语言:txt
复制
               });
代码语言:txt
复制
               markers = [];
代码语言:txt
复制
               var bounds = new google.maps.LatLngBounds();
代码语言:txt
复制
               places.forEach(function(place) {
代码语言:txt
复制
                   if (!place.geometry) {
代码语言:txt
复制
                       console.log("Returned place contains no geometry");
代码语言:txt
复制
                       return;
代码语言:txt
复制
                   }
代码语言:txt
复制
                   markers.push(new google.maps.Marker({
代码语言:txt
复制
                       map: map,
代码语言:txt
复制
                       title: place.name,
代码语言:txt
复制
                       position: place.geometry.location
代码语言:txt
复制
                   }));
代码语言:txt
复制
                   if (place.geometry.viewport) {
代码语言:txt
复制
                       bounds.union(place.geometry.viewport);
代码语言:txt
复制
                   } else {
代码语言:txt
复制
                       bounds.extend(place.geometry.location);
代码语言:txt
复制
                   }
代码语言:txt
复制
               });
代码语言:txt
复制
               map.fitBounds(bounds);
代码语言:txt
复制
           });
代码语言:txt
复制
       }
代码语言:txt
复制
   </script>

</head>

<body>

代码语言:txt
复制
   <input id="address" type="text" placeholder="Enter a location">
代码语言:txt
复制
   <input id="radius" type="number" placeholder="Enter a radius">
代码语言:txt
复制
   <button onclick="search()">Search</button>
代码语言:txt
复制
   <div id="map" style="height: 400px;"></div>
代码语言:txt
复制
   <script>
代码语言:txt
复制
       function search() {
代码语言:txt
复制
           var address = document.getElementById('address').value;
代码语言:txt
复制
           var radius = document.getElementById('radius').value;
代码语言:txt
复制
           axios.post('/search', {
代码语言:txt
复制
               address: address,
代码语言:txt
复制
               radius: radius
代码语言:txt
复制
           })
代码语言:txt
复制
           .then(function (response) {
代码语言:txt
复制
               console.log(response.data);
代码语言:txt
复制
           })
代码语言:txt
复制
           .catch(function (error) {
代码语言:txt
复制
               console.log(error);
代码语言:txt
复制
           });
代码语言:txt
复制
       }
代码语言:txt
复制
   </script>

</body>

</html>

代码语言:txt
复制

请注意,上述代码中使用了Axios库来发送异步POST请求,确保你已经在项目中安装了Axios。

  1. 运行Laravel项目,并访问/search路由,你将看到一个包含Google地图和搜索表单的页面。输入地址和半径后,点击搜索按钮,将会在控制台中打印出符合条件的结果。

这是一个基本的示例,你可以根据自己的需求进行修改和扩展。在这个示例中,我们使用了Google Maps JavaScript API和MySQL来实现在Laravel中使用Google地图和MySQL进行半径搜索。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何使用SXDork并利用Google Dorking技术互联网搜索指定信息

关于SXDork  SXDork是一款功能强大的信息收集工具,该工具可以利用Google Dorking技术互联网上搜索特定信息。...Google Dorking技术是一种使用高级搜索操作符关键词来发现互联网上公开敏感信息的方法。...SXDork的一个关键功能是它能够使用-s选项来搜索指定信息,这种功能允许用户检索与搜索关键字相关的大量信息。用户可以指定特定的关键词,该工具将搜索互联网上可用的所有相关信息。...默认情况下,该工具pastebin.comcontrolc.com上搜索信息,但您可以轻松添加更多的域进行搜索。...,然后使用pip命令项目提供的requirements.txt文件安装该工具所需的依赖组件: python3 -m venv venv source venv/bin/activate pip install

1.1K20

Linux 如何使用 HAProxy、Nginx Keepalived 进行负载均衡?

现代网络应用,负载均衡是提高性能可靠性的关键因素之一。通过将请求分发到多个服务器上,负载均衡可以确保请求被合理地处理,并避免单点故障。... Linux 环境下,常用的负载均衡解决方案包括 HAProxy、Nginx Keepalived。本文将详细介绍如何使用这三个工具 Linux 实现负载均衡。1....结论使用 HAProxy、Nginx Keepalived 可以 Linux 环境实现高效的负载均衡解决方案。...本文中,我们详细介绍了 Linux 中使用 HAProxy、Nginx Keepalived 进行负载均衡的步骤配置。...在实践,要密切监控负载均衡器后端服务器的性能指标,定期进行性能调优监控,以保持系统的稳定高效运行。同时,确保服务器和服务的安全配置,以防止潜在的安全威胁。

1.5K00

基于 Redis Geo 实现地理位置服务(LBS)查找附近 XXX 的功能

在此之前,学院君基于 Laravel + Vue 构建前后端分离应用 这个项目中就已经实现过类似的 LBS 服务 —— 定位当前用户所在的城市然后显示该城市所有的咖啡店: 基于数据库进行地理位置查询...cafes Geo 结构: Geo 底层使用的数据结构是 ZSET(有序集合),所以你可以 Geo 上使用任何 ZSET 指令: 要删除某个 Geo 集合,使用 ZREM 指令即可,所以 Geo...存放到底层 ZSET 集合的元素键值 Geo 的元素键值对应,score 字段存放的则是 GeoHash 对坐标编码后的 52 位整数值,使用 Geo 进行查询时,先通过对 ZSET 的 score...,于是,阿里云 Tair 团队将阿里云 Redis 企业版 Tair 性能增强型包含的矩形搜索能力贡献给了 Redis 社区,也就是 GEOSEARCH GEOSEARCHSTORE 指令所做的事情...radius 公里内所有的咖啡店,并包含距离坐标信息,最后再通过高德提供的地图 API 将位置映射到地图上渲染出来,并且通过路径规划 API 完成路径推荐,这样,就完成了一个查找附近咖啡店的功能闭环。

3.5K20

使用 WPADPAC JScriptwin11进行远程代码执行

IT 的工程决策通常是不完整的信息时间压力下做出的,IT 堆栈的一些奇怪之处最好用“当时似乎是个好主意”来解释。...初步调查显示,负责执行这些配置文件的 JS 引擎是 jscript.dll - 也支持 IE7 IE8 的旧版 JS 引擎(如果使用适当的脚本属性, IE7/8 兼容模式下仍然可以 IE11 访问...其他操作系统应用程序也是如此。例如,Google Chrome 也有一个 WPAD 实现,但在 Chrome 的情况下,评估 PAC 文件的 JavaScript 代码发生在沙箱内。...这篇旧的 MSDN 文章描述了 JScript 的垃圾收集器. JScript 使用非分代标记清除垃圾收集器。本质上,每当触发垃圾回收时,它都会标记所有 JScript 对象。...该表按触发漏洞所需的类兼容模式对漏洞进行了细分。

5.2K470

使用 WPADPAC JScriptwin11进行远程代码执行3

我们的例子,这个指针指向变量 1 之前的 16 个字节。这基本上意味着变量 2 的最后 8 字节 qword 变量 1 的第一个 8 字节 qword 重叠。...我们按以下步骤进行: 从任何 JScript 对象的 vtable 读取 jscript.dll 的地址 通过读取jscript.dll的导入表读取kernel32.dll的地址 通过读取kernel32...这意味着漏洞利用在系统上可以访问修改的内容非常有限,特别是利用后或系统重新启动后持续存在。虽然 Windows 总是可能存在未修复的权限提升,但我们不需要找到新的漏洞来提升我们的权限。...因此,我们 C++ 实现了我们自己的更简单的版本,它使用CreateProcessWithToken API直接生成带有 SYSTEM 令牌的任意进程。...这些是搜索“禁用 WPAD”时在网上常见的一些建议,这些建议我们的实验无法阻止攻击: 控制面板关闭“自动检测设置” 设置“WpadOverride”注册表项 将“255.255.255.255

1.9K310

使用 WPADPAC JScriptwin11进行远程代码执行1

开发 了解 JScript VAR 字符串 由于在这篇博文的其余部分,我们将大量讨论 JScript VAR 字符串,因此深入了解这些漏洞的工作原理之前先描述这些内容是很有用的。...像这样越界读取的字符串内容将在一个可以检查的字符串变量返回给调用者。 我们将要使用第二次越界读取,但首先我们需要弄清楚如何将受控数据放入start_indexend_index 。...特制琴弦的内容现阶段不重要,但在下一阶段会很重要,所以会在此进行说明。另请注意,通过检查堆元数据,我们可以轻松确定进程正在使用哪个堆实现(段堆与 NT 堆)。...图像 2 3 显示了信息泄漏前后使用堆历史查看器创建的堆可视化。...第 2 阶段:溢出 漏洞利用的第 2 阶段,我们将使用这个堆溢出漏洞 Array.sort

7.8K950

WindowsC#中使用DapperMysql.Data库连接MySQL数据库

WindowsC#中使用DapperMysql.Data库连接MySQL数据库 Windows中使用C#连接Mysql数据库比较简单,可以直接使用MySql.Data库,目前最新版本为:8.3.0...当然也可以结合MySql.DataDapper库一起使用,目前Dapper的最新版本为:2.1.35。...Dapper是一款轻量级ORM工具,是一个简单的.NET对象映射器,速度上几乎与使用原始ADO.NET数据读取器的速度一样快。ORM是一个对象关系映射器,它负责数据库编程语言之间的映射。...数据库,并查询MySql数据库对应的people表,然后在窗体程序输入字段LastName来查询对应的数据,鼠标按下search按钮,ListBox展示从MySQL数据库的查询结果;另外我们在下方的三个输入框中分别输入用户的....msi数据库安装包之后,我们root账号的初始密码设置为123456,然后使用Navicat Premium 16连接并登录本地MySQL数据库,然后先创建ytdemo数据库,然后该数据库创建people

8300

关于使用Navicat工具对MySQL数据进行复制导出的一点尝试

最近开始使用MySQL数据库进行项目的开发,虽然以前大学期间有段使用MySQL数据库的经历,但再次使用Navicat for MySQL时,除了熟悉感其它基本操作好像都忘了,现在把使用的问题作为博客记录下来...需求 数据库的表复制 因为创建的表有很多相同的标准字段,所以最快捷的方法是复制一个表,然后进行部分的修改添加....但尝试通过界面操作,好像不能实现 通过SQL语句,命令行对SQL语句进行修改,然后执行SQL语句,可以实现表的复制 视图中SQL语句的导出 使用PowerDesign制作数据库模型时,需要将MySQL...数据库的数据库表的SQL语句视图的SQL语句导出 数据库表的SQL语句到处右击即可即有SQL语句的导出 数据库视图的SQL语句无法通过这种方法到导出 解决办法 数据库表的复制 点击数据库右击即可在下拉菜单框中看到命令列界面选项...,点击命令行界面选项即可进入命令列界面 命令列界面复制表的SQL语句,对SQL语句字段修改执行后就可以实现数据库表的复制 视图中SQL语句的导出 首先对数据库的视图进行备份 备份好的数据库视图中提取

1.2K10

【实践操作】 iOS11使用Core ML TensorFlow对手势进行智能识别

计算机科学,手势识别是通过数学算法来识别人类手势的一个议题。用户可以使用简单的手势来控制或与设备交互,让计算机理解人类的行为。...这篇文章将带领你实现在你自己的应用中使用深度学习来识别复杂的手势,比如心形、复选标记或移动设备上的笑脸。我还将介绍使用苹果的Core ML框架(iOS11的新框架)。 ?...屏幕上随便划动两下,手机就会对复杂的手势进行实时识别 这项技术使用机器学习来识别手势。本文中的一些内容是特定于iOS系统的,但是Android开发者仍然可以找到一些有用的信息。...教程地址:https://www.tensorflow.org/get_started/mnist/pros 我用来训练导出模型的一组脚本一个叫做“gesturelearner”的文件夹。...Google的protocol buffers地址:https://developers.google.com/protocol-buffers/ 到目前为止,除了现有的转换器的内部代码之外,web

2.7K60

MySQL,如何进行备份恢复数据库?物理备份逻辑备份的区别是什么?

物理备份可以使用以下方法进行使用mysqldump命令进行备份: 备份数据库:mysqldump -u username -p database_name > backup_file.sql 还原数据库...二、逻辑备份 逻辑备份是将数据库的数据结构导出为SQL语句的形式,以文本文件的形式存储备份数据。...:mysql -u username -p database_name < backup_file.sql 使用MySQL Workbench等图形界面工具进行备份恢复。...逻辑备份的优点是备份文件较小,易于跨平台,且备份文件可以进行修改或筛选数据。缺点是备份恢复速度较慢。 结论 物理备份逻辑备份的主要区别在于备份文件的形式备份恢复的灵活性。...物理备份直接复制数据库的二进制文件,备份文件较大,恢复时只能在相同架构的MySQL服务器上使用;逻辑备份将数据库导出为SQL语句的形式,备份文件较小,恢复时可跨平台使用,也可以进行数据的修改筛选。

54781

3分钟短文 | Laravel 自定义 SQL 查询参数绑定

引言 laravel使用模型进行数据库操作时,并不是所有的字段或者关联关系 都能满足查询需求,有时候会有一些MySQL的函数计算等功能放在数据库 层面执行。 本文说一说自定义的参数绑定办法。...首先是使用select方法指定了返回字段名, 对于自定义的字段 distance 使用 having 子句进行进一步条件限定。...如果大家经常使用laravel的调试功能的话,应该会注意到,这种问号的写法是laravel本身封装SQL语句用的。...lat ) ) ) ) AS distance"), ["lat" => $lat, "lng" => $lng, "lat_i" => $lat]); 上面的语句只用了select方法,其他的筛选排序...; 写在最后 本文通过三种方式实现了laravel模型进行复杂的自定义查询, 其中提供了两种参数绑定的方式,我们推荐使用 selectRaw 的方式, 更为直观。

2K40

如何使用truffleHogGit库搜索高熵字符串敏感数据以保护代码库安全

关于truffleHog truffleHog是一款功能强大的数据挖掘工具,该工具可以帮助广大研究人员轻松从目标Git库搜索搜索高熵字符串敏感数据,我们就可以根据这些信息来提升自己代码库的安全性了...该工具可以通过深入分析目标Git库的提交历史代码分支,来搜索出潜在的敏感信息。 运行机制 该工具将遍历目标Git库的每个分支的整个提交历史,检查每个提交的每个Diff,并检查可能存在的敏感数据。...这是由正则表达式熵得出的,对于熵检查,truffleHog将评估每个Diff超过20个字符的文本块的base64字符集十六进制字符集的香农熵。...--include_paths”“--exclude_paths”选项的帮助下,我们还可以通过文件定义正则表达式(每行一个)来匹配目标对象路径,从而将扫描限制为Git历史对象的子集。...与此同时,我们还可以使用“-h”“--help”命令来查看更多有用的信息。

2.7K20

Laravel5.2之Demo1——URL生成存储

引言: 本文基于Laravel框架做的一个URL生成存储demo,主要目的是学习使用Laravel框架。...的连接信息,Laravel框架为数据库连接提供了配置文件:/config/database.php,Laravel支持SQlite、MySQL、PostgreSQL、SQLSRV数据库,本教程使用MySQL...在这里使用laravelcollective/html这个组件,顺便了解下怎么laravel安装组件。 这里书中使用laravel4.*自带的Form类,但laravel5....项目根目录执行Artisan命令php artisan make:model Link后,生成app/Link.php文件,这个model通过配置用来管理MySQL的links数据表,Link这个...links数据表的名称,fillable用来配置数据表字段(column)被批量创建和更新的,因为后文保存数据进入表里时使用Link::create([])方法来进行批量赋值的。

24K31

需要掌握的 Laravel Eloquent 搜索技术

项目中的搜索功能也是如此,没必要在一开始就引入完整的第三方类库进行搜索功能支持。大多数情况下使用 Eloquent 的查询功能就可以完成基本的搜索处理。 预热 搜索功能是应用的重要组成模块。...本文将带领大家学习 MySQL Eloquent 搜索模块设计的相关技术。 基本的 Eloquent Where 查询 作为首个要讲解的搜索功能,我们先不涉及新知识点。... Laravel 可以使用 where 方法实现对给定字段给定值进行比较查询,就是这样简单。 <?...当然,上面的查询功能都可以文档中找到。 JSON 列搜索 JSON 类型让数据存储拥有灵活性,这个功能很赞。...我们可以 Laravel使用 where 语句,可以使用原生 SQL 语句,甚至可以使用模糊查询相似查询,所有这些查询功能都是 Laravel 内置提供的开箱即用,非常赞!

3.5K10

全栈工程师的思考

那么全栈工程师的书架就会充满各种各样的技术栈从 MySQL、SQLite、MongoDB、Redis 等等各种各样的书籍;而专家的书籍则是 MySQL 优化、MySQL 重构、MySQL 权威指南、DBMS...Key 曾经迷惑了很久: 为什么对于一些知识点,我需要去 Google,而别人可以独立地完成的时候。我就意识到我更适合于互联网企业,据说一些电信设备制造商里是没网的办公环境。...当我们心里有一个想法的时候,我就开始从一个 key 中进行头脑风暴,如之前做的地图搜索。我们要做的功能便是: 持久化 GEO 信息,地图上显示坐标。 1....然后,对于空间搜索的支持: 就这么有了两个搜索引擎一个数据库: ElasticSearch、Solr 以及 MongoDB。...因为 Django 对于 MongoDB 支持的原因,想到使用搜索引擎会更容易搜索到结果。接着找到了 Haystack,看到 Solr 需要手动更新索引就选择了 ElastiSearch。 4.

72180

全栈工程师的思考

那么全栈工程师的书架就会充满各种各样的技术栈从MySQL、SQLite、MongoDB、Redis等等各种各样的书籍;而专家的书籍则是MySQL优化、MySQL重构、MySQL权威指南、DBMS等等的专业书籍合集...Key 曾经迷惑了很久: 为什么对于一些知识点,我需要去Google,而别人可以独立地完成的时候。我就意识到我更适合于互联网企业,据说一些电信设备制造商里是没网的办公环境。...当我们心里有一个想法的时候,我就开始从一个key中进行头脑风暴,如之前做的地图搜索。我们要做的功能便是: 持久化GEO信息,地图上显示坐标。...3.然后,对于空间搜索的支持: 就这么有了两个搜索引擎一个数据库: ElasticSearch、Solr以及MongoDB。...因为Django对于MongoDB支持的原因,想到使用搜索引擎会更容易搜索到结果。接着找到了Haystack,看到Solr需要手动更新索引就选择了ElastiSearch。

1K60

需要掌握的 Laravel Eloquent 搜索技术

本文将带领大家学习 MySQL Eloquent 搜索模块设计的相关技术。 基本的 Eloquent Where 查询 作为首个要讲解的搜索功能,我们先不涉及新知识点。... Laravel 可以使用 where 方法实现对给定字段给定值进行比较查询,就是这样简单。 <?...当然,上面的查询功能都可以文档中找到。 JSON 列搜索 JSON 类型让数据存储拥有灵活性,这个功能很赞。...Laravel 也可以轻松执行对 JSON 数据的查询,这得益于 Laravel 良好的 JSON 支持。 不过深入研究之前需要注意的一点是:谨记 JSON 列的存储是 区分大小写 的。...我们可以 Laravel使用 where 语句,可以使用原生 SQL 语句,甚至可以使用模糊查询相似查询,所有这些查询功能都是 Laravel 内置提供的开箱即用,非常赞!

4.3K20
领券