mysql - mySql - 在特定城市附近寻找客户
问题描述
我正在尝试制作一个查询以查找给定城市和州 X 英里内的所有客户,基本上使用以下表结构:
Users Table
-----------
ID
PersonsName
ZipCode
Zipcodes Table (contains all ZIPs in the US)
--------------------------------------------
ID
ZipCode
City
State
latitude
longitude
如果我已经知道我感兴趣的城市的纬度/经度,那么很容易找到附近的用户,如以下查询所示:
SELECT ID from Users u
JOIN Zipcodes z1 ON u.zipcode = z1.zipcode
WHERE
COS(SIN(PI()*z1.latitude/180.0)*SIN(PI()*[desired latitude]/180.0)+COS(PI()*z1.latitude/180.0)*COS(PI()*[desired latitude]/180.0)*COS(PI()*[desired longitude]/180.0-PI()*z1.longitude/180.0))*3963.0 <= [desired distance]
但是,我希望能够使用城市名称和州缩写来方便输入,然后让查询使用该 lat/lng 进行距离比较。
我想我可以写两个查询,第一个获取所需城市的纬度/经度,然后第二个使用结果查找在返回的经度/经度对的一定距离内的用途,但它可以组合成一个获取城市匹配的正确纬度/经度然后在 WHERE 子句中的距离计算中使用它的单个查询?
无法弄清楚如何制作它以便可以找到城市的纬度/经度,然后在同一个查询中使用距离。
希望能够让我们的一名员工能够简单地输入城市/州和所需的距离,并且代码返回所有适用的客户。该代码只会获得特定城市的第一个匹配项(对于较大的城市,ZIP 表中可能有许多条目),但这对于我们的目的来说很好(因此我们可以只使用第一个匹配项)。
解决方案
听起来您可能需要在其中进行一些地理编码,才能将城市名称转换为坐标。有很多好的 API 可用(Google、Algolia、Mapbox 等)
推荐阅读
- pdflib - PDFlib - 使用文档页面保存自定义元数据?
- amazon-web-services - 调用端点 url 时未找到 AWS API Gateway 404 页面错误
- java - 无法让 findAll 在 Elasticsearch 中工作
- asp.net-core - 如何将 IdentityDbContext 与两个数据库相关联?
- opengl - glRotatef 是否也会旋转法线方向?
- c++ - 如何在不使用 GAC 的情况下使 C++/CLI DLL 解决对托管程序集 (DLL) 的依赖?
- c# - 无法将文件“DefaultConnection.mdf”附加为数据库“DefaultConnection”(将 MySQL 与 ASP.NET 一起使用)
- java - 如何从文件中的句子创建随机字符串轮换?
- intellij-idea - 如何防止格式化程序在分号后添加换行符?
- javascript - 节点js中是否有任何方法或任何库可以将折线谷歌地图保存为png图像而不呈现任何HTML?