google-maps - 在谷歌地图上绘制多边形并查询位于该区域的项目
问题描述
我有一个基于 Web 的仪表板,其中包含 7 天内车辆移动的经纬度信息。在这种情况下,地图层是谷歌地图,车辆移动的数据存储在 PostgreSQL 中。用户想要做的是在特定区域上绘制一个多边形,并触发一个查询,该查询将显示所有经过该区域的车辆。我已经有了地图和所有车辆 lon lat 数据,有没有办法可以使用 json 或 javascript 来做到这一点,而无需将多边形上传到数据库?
我知道如果我将多边形上传到数据库中,Postgress 可以做到这一点。为了安全和数据管理,我不想将多边形上传到 PostgreSQL。我想绘制多边形并使用 JavaScript 触发查询。
解决方案
只需使用静态几何
SELECT *
FROM <points_table> AS pt
WHERE ST_Intersects(pt.geom, <static_geometry);
哪里<static_geometry>
会是其中之一
- ST_GeomFromText(通常最快)
- ST_GeomFromKML(谷歌自己的,可能很方便)
- ST_GeomFromGeoJSON(如果你有 GeoJSON 字符串)
- ST_PolygonFromText(比通用函数慢;添加了多边形验证步骤)
并将传输的输入坐标解析到函数中(注意每个函数的不同坐标顺序)。仍然不需要上传,因为这些函数只接受字符串格式的输入,所以对可能的SQL 注入采取通常的预防措施。
几何输出有等效的功能(ST_As<Format>
例如ST_AsGeoJSON)。
如何最好地收集、传输和解析从客户端到服务器再到 DB 的多边形坐标取决于您的设置。
推荐阅读
- jquery - RoR:link_to 块中的 link_to 标签?
- visual-studio - 如何使用 asp:MenuItem NavigateUrl 属性在同一解决方案中调用 BlazorServer 应用程序?
- javascript - Clean webpack 插件在保存 sass 文件时清除字体和图像并且它们不会被重建
- javascript - 覆盖平面列表列数的下拉列表
- python - 在熊猫数据框中将字符串拆分为 3(三元组)
- react-native - React Native App Stuck on Resolve dependencies of :app:debugRuntimeClasspath react-native run-android
- i3 - 显示 i3 上的所有工作区
- swift - XCode 核心数据在某些脚本中未正确加载
- android - 自定义 Drawable 未绘制
- regex - 匹配任何单词的正则表达式,但不是数字后的单个字符