我需要根据Latitude和longitide以及距离参数获取最近邻居商家位置列表。 为此,我使用下面的查询创建了一个表:
**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中构建一个select查询,它将从指定的纬度,经度和距离返回此表中的所有位置。
对于前者,如果我的纬度为39.34且经度为-84.56,距离为5英里,我如何构建查询以从5英里以外的表中获取所有位置记录?..
答案 0 :(得分:0)
我认为可以通过以下方式完成: -
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/