【问题标题】:How do i get the nearest neighbor locations based on a LAT/LONG and a distance in MySQL?如何根据 LAT/LONG 和 MySQL 中的距离获取最近的邻居位置?
【发布时间】:2013-06-07 10:55:01
【问题描述】:

我需要根据纬度和经度以及距离参数获取最近邻居商家位置的列表。 为此,我使用以下查询创建了一个表:

**create table location.ML_POINTS_5K(
    MERCHANT_ID         INT(15), 
    STREET_ADDRESS      VARCHAR(50), 
    CITY                VARCHAR(50), 
    STATE               VARCHAR(25), 
    ZIPCODE             VARCHAR(11), 
    COUNTRY             CHAR(2),      
    ACCESSIBILITY       CHAR(1),      
    LOCATION_GEO_CODES_SDO  POINT NOT NULL, 
    BRAND_ID INT(7) NOT NULL,
    SPATIAL INDEX(LOCATION_GEO_CODES_SDO),
    PRIMARY KEY(MERCHANT_ID),
    FOREIGN KEY(BRAND_ID) REFERENCES BRAND(BRAND_ID)    
) ENGINE=MyISAM;**

现在,我还使用以下示例查询向该表中插入了一些记录,以确保点几何插入正常。

**INSERT INTO LOCATION.ML_POINTS_5K VALUES(11111,'111 678 St','Warren', 'OH', '11111','US','Y',GeomFromText('POINT(-82.7071458 39.90564701)'),1004);**

现在我需要在 MYSQL 中构造一个选择查询,它将返回此表中的所有位置,从指定的纬度、经度和距离。

例如,如果我的纬度为 39.34,经度为 -84.56,距离为 5 英里,我如何构建查询以从上面创建的表中获取 5 英里范围内的所有位置记录.?..

【问题讨论】:

    标签: mysql spatial spatial-query


    【解决方案1】:

    我认为可以这样做:-

    SELECT MERCHANT_ID, STREET_ADDRESS, CITY, STATE, ZIPCODE, COUNTRY, (GLength(LineStringFromWKB(LineString(LOCATION_GEO_CODES_SDO, GeomFromText('POINT(-84.56 39.34)'))))) * (1000000 / 1604) AS distance
    FROM ML_POINTS_5K
    WHERE ((GLength(LineStringFromWKB(LineString(LOCATION_GEO_CODES_SDO, GeomFromText('POINT(-84.56 39.34)'))))) * (1000000 / 1604)) < 5
    

    我认为默认距离以 100 公里为单位,因此需要对其进行操作以使其以英里为单位。

    基于此的代码:-

    http://www.tech-problems.com/calculating-distance-in-mysql-using-spatial-point-type/

    【讨论】:

    • 非常感谢。这确实返回了一些记录。现在主要的悬而未决的问题是在计算距离时使用的确切度量是什么。我知道您暗示默认距离为 110 公里,但在任何地方都有记录。似乎在任何地方都找不到。
    • 我能看到的唯一地方是该页面底部的 cmets。不过,我想了解更多细节。
    猜你喜欢
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    • 2021-07-25
    • 2018-03-20
    • 1970-01-01
    • 2019-06-05
    • 2015-06-17
    • 2017-02-27
    相关资源
    最近更新 更多