Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL中,如何根据LAT/LONG和距离获取最近的邻居位置?_Mysql_Spatial_Spatial Query - Fatal编程技术网

在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公里,但这是否有记录在案。好像到处都找不到。我唯一能看到的地方就是那页底部的评论。不过,我想再详细检查一下。