好的 - 我已经和我一起打了大约3个月的摔跤,因为我已经筋疲力尽了我所遇到的每一个地理接近公式,而且我没有接近得到正确的结果我认为是时候了请求一些帮助.
目的
我正在建立一个商店定位器的相当基本的实现.用户输入他们的邮政编码并从预定义的搜索半径列表中进行选择.gmaps API为此地址生成纬度/经度坐标,并将它们传递给php脚本.在此脚本中,将针对mysql数据库表查询用户坐标(下面的结构)
post_id int(11)
post_type varchar(20)
lat float(10,6)
lng float(10,6)
Run Code Online (Sandbox Code Playgroud)
将此查询的结果(post id)输入到wordpress查询中,该查询生成包含地图标记数据的XML.(wordpress查询使用post__in和posts_per_page -1来显示查询生成的所有ID的信息
问题
简而言之,我遇到的Haversine公式的每一个实现似乎都会导致缺少标记 - 特别是任何非常靠近用户输入坐标的标记(不知道确切但我认为它在500米左右).这是一个很大的问题,好像用户输入他们的邮政编码,并且有一个非常接近他们位置的商店,它将不会出现.
我已经尝试了大约8种不同的论坛的排列,我从各种教程中挖出了相同的结果.以下是我目前在网站上使用的公式,该公式提供除了非常接近用户输入位置的标记之外的所有标记:
$center_lat = $_GET["lat"];
$center_lng = $_GET["lng"];
$radius = $_GET["radius"];
// Calculate square radius search
$lat1 = (float) $center_lat - ( (int) $radius / 69 );
$lat2 = (float) $center_lat + ( (int) $radius / 69 );
$lng1 = (float) $center_lng - (int) $radius / abs( cos( deg2rad( (float) $center_lat ) ) * 69 );
$lng2 = (float) $center_lng …Run Code Online (Sandbox Code Playgroud) 我正在开发一个网络应用,用户在地图中设置一个位置(Google Maps API),我将坐标存储在数据库中.所以,在另一个页面,我想进行搜索,包括获取我的本地坐标,并根据半径检索先前存储在我的数据库中的附近地点.我怎样才能做到这一点?
我在CakePHP中构建了一个列出业务的应用程序.大约有2000个条目,每个企业的纬度和经度坐标都在DB中.
我现在正试图解决搜索功能.
将有一个输入框,用户可以在其中放置街道地址,城市或邮政编码,然后我希望它返回从数据库中找到的11个最接近的企业.
我该怎么做呢?
我试图从我的桌子获得100分,距离给定点的距离最小.
我正在使用
SELECT *, GLENGTH(
LINESTRINGFROMWKB(
LINESTRING(
ASBINARY(
POINTFROMTEXT("POINT(40.4495 -79.988)")
),
ASBINARY(pt)
)
)
)
AS `distance` FROM `ip_group_city` ORDER BY distance LIMIT 100
Run Code Online (Sandbox Code Playgroud)
(是的,这很痛苦.我只是用Google搜索它.我不知道如何正确测量MySQL中的距离)
执行需要很长时间.EXPLAIN说没有possible_keys.
我在列SPATIAL上创建了一个索引pt:
CREATE SPATIAL INDEX sp_index ON ip_group_city (pt);
Run Code Online (Sandbox Code Playgroud)
虽然我真的不知道如何正确使用它.你能帮我么?
在我的网站上,我正试图在附近找到位置.
我正在尝试使用Haversine公式.
我正在使用以下查询来获取25公里范围内的所有位置.
SELECT id, ( 6371 * acos( cos( radians(51.8391) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(4.6265) ) + sin( radians(51.8391) ) * sin( radians( lat ) ) ) ) AS distance
FROM shops
HAVING distance < 25
ORDER BY name asc
Run Code Online (Sandbox Code Playgroud)
但是我觉得有些函数可能只是MySQL,因为我收到以下错误:
警告:PDOStatement :: execute()[pdostatement.execute]:SQLSTATE [42883]:未定义的函数:7错误:函数弧度(文本)不存在LINE 1:... id,(6371*acos(cos(radians( 51.8391))*cos(弧度(l ... ^ HINT:没有函数匹配给定的名称和参数类型.你可能需要添加显式类型转换.in ...
或者它可能与我必须更改lat查询中的文本有关.但我不知道应该是什么.
51.8391和4.6265是我的"起点"的长点和长点.
任何帮助都非常感谢,因为我不知道要改变什么:-)
编辑
看起来问题出在我试图做的地方:radians(lat).
lat是我表中的一列.
当我尝试使用rad()hakre建议错误更改为:function rad(numeric) …
我正在PHP中实现Haversine公式,如下所示
$result=mysqli_query($mysqli,"SELECT *,( 6371 * acos( cos( radians({$lat}) ) * cos( radians( `latitude` ) ) * cos( radians( `longitude` ) -radians({$lon}) ) +sin( radians({$lat}) ) * sin( radians( `latitude` ) ) ) ) AS distance FROM `places` HAVING distance <= {$radius} ORDER BY distance ASC") or die(mysqli_error($mysqli));
Run Code Online (Sandbox Code Playgroud)
在Haversine访存循环中,我有一个查询,它遍历Haversine的结果以选择与Haversine公式返回的ID匹配的记录。查询如下。
while($row = mysqli_fetch_assoc($result))
{
$rest_time=$row['id'];
$result1=mysqli_query($mysqli,"SELECT * FROM my_friends WHERE personal_id='".$personal_id."' AND id='".$rest_time."'") or die(mysqli_error($mysqli));
//Some operations here
}
Run Code Online (Sandbox Code Playgroud)
如何执行Join操作将这些查询混合为一个查询?从优化的角度来看,这样做是否明智?如果第二个表有5万个用户,而第一个表有近1000条记录呢?
这是一个关于使用半正公式计算地球上两个纬度和经度点之间距离的问题,用于需要"找到最近"函数的项目.
在这篇文章中,我们已经在MySQL中很好地讨论并解决了hasrsine公式.
然后,我问了这个问题,将其转换为存储函数,以便将来可用于未来的项目,而无需查找,记住或重新键入长形式的公式.
都很好.除了我的函数结果(稍微)不同于直接在查询中键入公式,所有其他条件相同.为什么是这样?
所以这是我写的函数:
DELIMITER $$
DROP FUNCTION IF EXISTS haversine $$
CREATE FUNCTION `haversine`
(fromLatitude FLOAT,
fromLongitude FLOAT,
toLatitude FLOAT,
toLongitude FLOAT,
unit VARCHAR(20)
)
RETURNS FLOAT
DETERMINISTIC
COMMENT 'Returns the distance on the Earth between two known points of longitude and latitude'
BEGIN
DECLARE radius FLOAT;
DECLARE distance FLOAT;
IF unit = 'MILES' THEN SET radius = '3959';
ELSEIF (unit = 'NAUTICAL_MILES' OR unit='NM') THEN SET radius = '3440.27694';
ELSEIF (unit = 'YARDS' …Run Code Online (Sandbox Code Playgroud) 我运行基于地理位置的社交网络。成员可以根据彼此的亲密程度来查看其他成员。
现在我的MySQL查询看起来像:
$lat_min = $geo['user_lat'] - 5;
$lat_max = $geo['user_lat'] + 5;
$long_min = $geo['user_long'] - 5;
$long_max = $geo['user_long'] + 5;
$members_query = "SELECT " . $fields . " FROM members WHERE (user_lat BETWEEN " . $lat_min . " AND " . $lat_max . " AND user_long BETWEEN " . $long_min . " AND " . $long_max . ") OR (gc_lat BETWEEN " . $lat_min . " AND " . $lat_max . " AND gc_long BETWEEN " . $long_min …Run Code Online (Sandbox Code Playgroud) 这是loc_coordinate表结构:

下面是代码,从数据库中获取最近的位置并显示存储在数据库本身的地名.
<?php
include("config.php");
$lat = "3.107685";
$lon = "101.7624521";
$sql="SELECT ((ACOS(SIN($lat * PI() / 180) * SIN(lat * PI() / 180) + COS($lat * PI() / 180) * COS(lat * PI() / 180) * COS(($lon – lon) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS 'distance' FROM loc_coordinate HAVING 'distance'<='10' ORDER BY 'distance' ASC";
$stmt =$pdo->prepare($sql);
$stmt->execute();
while($row = $stmt->fetch())
{
echo $row['place'];
}
?>
Run Code Online (Sandbox Code Playgroud)
显示的错误:
致命错误:在第8行的C:\ wamp\www\mysite\by_coor.php中
PDOException:在第8行的C:\ wamp\www\mysite\by_coor.php中
echo $sql …
我的代码中有以下几行
query = "SELECT id, " \
"( 3959 * acos( cos( radians(37) ) * cos( radians( %(lat)i ) ) * " \
"cos( radians( %(lng)i ) - radians(-122) ) + sin( radians(37) ) * " \
"sin( radians( %(lat)i ) ) ) ) AS `distance` from message where" \
" `distance` <= %(drange)d" % {'lat': float(lat), 'lng': float(lng), 'drange': int(drange)}
print query
messages = db.session.query(Message).from_statement(query).all()
Run Code Online (Sandbox Code Playgroud)
我使用它时出现以下错误
OperationalError: (OperationalError) (1054, "Unknown column 'distance' in 'where clause'") 'SELECT id, ( 3959 …Run Code Online (Sandbox Code Playgroud) 我正在根据 GPS 坐标对同一位置的价格进行一些比较。所以例如我有一个带坐标的项目:
lat: 45.815005
lng: 15.978501
Run Code Online (Sandbox Code Playgroud)
我想在我的 MySQL 数据库中搜索在那个地方周围 500 米的每个项目。(它不需要是圆形的,只需 500 米,双向X500 米Y)。Lat并lng存储为单独的列类型float(10,6)在我的数据库中
我知道计算精确的 lng 和 lat 并不容易,但如果我错过了每个站点几米,我就没事。
这是一个非常复杂的问题,但我会感谢任何能开启我开始的建议。
mysql ×8
php ×7
haversine ×3
distance ×2
geolocation ×2
google-maps ×2
cakephp ×1
geo ×1
geospatial ×1
join ×1
optimization ×1
pdo ×1
postgresql ×1
proximity ×1
python ×1
spatial ×1
sql ×1
sqlalchemy ×1
wordpress ×1