mysql 从边界表中获取行的ID,其中数据与给定的纬度和半径重叠或相交

eivgtgni  于 2023-03-17  发布在  Mysql
关注(0)|答案(1)|浏览(103)

我的问题:我想从给定纬度和半径的表中获取所有行,以及边界(纬度和长度)包含/相交在从该纬度开始的给定半径内的行。
这背后的核心理念是:https://developers.google.com/maps/documentation/geocoding/requests-reverse-geocoding(反向地理编码)

  • 谷歌MapAPI将给予解决这个问题,但我需要这样做的数据,我在我的数据库。

表名:边界
列:ID、边界
色谱柱类型:id -〉varchar(255),边界-〉几何体
我使用的查询:

SELECT *
FROM boundary
WHERE ST_Distance(boundary, POINT(12.929961819992359, 77.60920439843274)) / 1000 <= 1;

我得到的回答是:确定(在MySQL工作台中)
寻求此问题的帮助。

lb3vh1jj

lb3vh1jj1#

应显式指定数据的地理空间参考系统(SRS)。MySql默认SRID为0,这不适用于地理点。例如

create table g (
  id int,
  p geometry
);

insert g 
  values
    row(1, ST_GeomFromText('POINT (39 49)', 4326)),
    row(2, ST_GeomFromText('POINT (39 51)', 4326)),
    row(3, ST_GeomFromText('POINT (41 51)', 4326)),
    row(4, ST_GeomFromText('POINT (41 49)', 4326));

select id, ST_Distance(p, ST_PointFromText('POINT (40 50)', 4326)) d
from g;

返回

id  d
1   140443.45807500975
2   140443.45807500975
3   139699.30401230097
4   139699.30401230097

db<>fiddle

相关问题