在MySQL中,如何根据LAT/LONG和距离获取最近的邻居位置?
我需要根据纬度、经度和距离参数获得最近邻商户位置的列表。 为此,我使用以下查询创建了一个表:在MySQL中,如何根据LAT/LONG和距离获取最近的邻居位置?,mysql,spatial,spatial-query,Mysql,Spatial,Spatial Query,我需要根据纬度、经度和距离参数获得最近邻商户位置的列表。 为此,我使用以下查询创建了一个表: **create table location.ML_POINTS_5K( MERCHANT_ID INT(15), STREET_ADDRESS VARCHAR(50), CITY VARCHAR(50), STATE VARCHAR(25), ZIPCODE
**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英里的距离内创建的表中获取所有位置记录-
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
选择商户ID、街道地址、城市、州、邮政编码、国家(GLength(LineStringFromWKB(LineStringFromWKB(LineStringFromWKB)(LineStringFromText(位置、地理编码、GeomFromText('POINT(-84.56 39.34))))*(1000000/1604)作为距离
从ML_点到5K点
式中((GLength(LineStringFromWKB)(LineStrings(位置、地理编码、地理文本('POINT(-84.56 39.34)'))))*(1000000/1604))<5
我认为默认距离是以100公里为单位的,因此需要对其进行操作以获得以英里为单位的距离
基于此的代码:-
非常感谢。这确实会返回一些记录。现在主要的开放性问题是在计算距离时使用的精确度量是什么。我知道你暗示的默认距离是110公里,但这是否有记录在案。好像到处都找不到。我唯一能看到的地方就是那页底部的评论。不过,我想再详细检查一下。