在 MySQL 数据库中,如何找到完全或部分落在距另一点一定距离内的圆形区域?有很多例子可以找到某个半径内的点,但没有找到与该半径相交的圆形区域。
我有一份为某些区域(点和半径)提供服务的承包商列表。客户需要能够根据与他们的距离找到这些承包商。
最佳答案
我认为您正在寻找 ST_Buffer,它将几何图形缓冲一定距离。在您的情况下,这会将您的点变成一个圆圈,然后您可以使用 ST_Intersects 找到代表承包商区域的相交圆圈。
就像是:
Select id from contractor c where intersects(c.geom, st_buffer(point, radius));
显然,您需要提供点和半径的值。
ST_Intersects(g1, g2) 相交关系(任意几何体)
MySql空间扩展文档中已经指明各种几何对象可以使用intersect函数来判断几何对象是否和一个矩形相交。
这样在取得近似范围后我们可以再使用距离估算来过滤出正确的结果。
SET @center = GeomFromText('POINT(10 10)');
SET @radius = 30;
SET @bbox = CONCAT('POLYGON((',
X(@center) - @radius, ' ', Y(@center) - @radius, ',',
X(@center) + @radius, ' ', Y(@center) - @radius, ',',
X(@center) + @radius, ' ', Y(@center) + @radius, ',',
X(@center) - @radius, ' ', Y(@center) + @radius, ',',
X(@center) - @radius, ' ', Y(@center) - @radius, '))'
);
[1]
SELECT name, AsText(location)
FROM Points
WHERE Intersects( location, GeomFromText(@bbox) )
AND SQRT(POW( ABS( X(location) - X(@center)), 2) + POW( ABS(Y(location) - Y(@center)), 2 )) < @radius; To Obtain a result ordered by distance from the center of the selection area:
ST_BufferST_Buffer
注意:ST_BUFFER()的参数地理信息及返回值均使用墨卡托坐标系,如非墨卡托坐标系的geojson,需使用工具类进行转换处理
获取几何对象和距离,然后返回与源对象的距离小于或等于以输入距离为单位测量半径的所有点。
st_buffer(geometry, 半径)
geometry为点时【例:st_buffer(ST_GeomFromText("POINT(1 2)"), 300)】,点+半径生成圆;
geometry为线时【例:st_buffer(ST_GeomFromText("linestring(1 2,3 4)"), 300)】,线+半径生成圆角矩形;
geometry为面时【例:st_buffer(ST_GeomFromText("POLYGON(1 2,3 4,5 6)"), 300)】,面+半径生成更大的面。
在地图功能中,缓冲区是非常常见的功能,一来可以查看点线面一定范围类的覆盖区域,二来在一些分析场景中,已知一个位子坐标信息及缓冲半径,生成缓冲区作为查询条件进行地理搜索
set @lon = 110.280843;
set @lat = 19.932968;
set @point = point(@lon, @lat);
set @t = 50; -- 单位为单位
set @radius = @t*0.01;
set @polygon = ST_Buffer(@point, @radius);
select * from map_store_goods l
where Intersects(l.point_area_geometry, @polygon)
-- where st_within(l.point_area_geometry, @polygon)
-- where Intersects(l.point_area_geometry, ST_Buffer(ST_GeomFromText("POINT(12250287.21186569 2204561.0470163026)"), 10000000))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2019-04-10 SQL 快速生成不重复的卡号
2013-04-10 SQL: C# 批量插入表