簡體   English   中英

如何根據LAT / LONG和MySQL中的距離獲取最近的鄰居位置?

[英]How do i get the nearest neighbor locations based on a LAT/LONG and a distance in MySQL?

我需要獲取基於緯度和經度以及距離參數的最近鄰居商人位置的列表。 為此,我使用以下查詢創建了一個表:

**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;**

現在,我還使用以下示例查詢將一些記錄插入此表中,以確保將點幾何插入OK。

**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英里以內的上方創建的表中獲取所有位置記錄?? 。

我認為可以通過以下方式完成:

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/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM