我有纬度和经度,我想从数据库中提取记录,该记录具有最近的纬度和经度,如果该距离长于指定的距离,则不检索它.
表结构:
id
latitude
longitude
place name
city
country
state
zip
sealevel
Run Code Online (Sandbox Code Playgroud) 有没有可能在不使用webservices的情况下确定point(lat/lon)的时区?Geonames.org对我来说不够稳定:(我需要这个在PHP中工作.
谢谢
我有一个相当的,对我来说,复杂的mysql查询,我完全陷入困境,无法找到任何在线答案.
这是我的查询:
SELECT
items.*
FROM
items
INNER JOIN
items_meta_data
WHERE
(
(meta_key = 'lat' AND meta_value >= '55')
OR
(meta_key = 'lat' AND meta_value <= '65')
)
AND
(
(meta_key = 'long' AND meta_value >= '20')
OR
(meta_key = 'long' AND meta_value <= '30')
)
GROUP BY
item_id
Run Code Online (Sandbox Code Playgroud)
当然,我只用1个语句测试了查询,并且工作正常.因此,如果我只传递长或纬度部分,那么我得到结果.只有当我尝试将它们拼接在一起时才会得到不同的结果.
我在这里先向您的帮助表示感谢!
表结构如下:
表项:ID item_name item_description
表meta:meta_id item_id meta_key meta_value
解
对于任何有兴趣的人,我终于设法解决了这个问题.谢谢大家的帮助和内心.
SELECT
SQL_CALC_FOUND_ROWS items.*
FROM
items
INNER JOIN
items_meta ON (items.ID = items_meta.post_id)
INNER JOIN
items_meta AS m1 ON (items.ID = …Run Code Online (Sandbox Code Playgroud) 我有一个名为table的表flags,其中包含一个coordinates充满MySQL'points' 的列.我需要执行一个查询,我根据半径为100米的纬度和经度位置得到圆内的所有标志.
从使用的角度来看,这是基于用户的位置.例如,移动电话将给出用户的纬度和经度位置,然后将其传递给API的这一部分.然后由API在半径为100米的用户周围创建一个不可见的圆圈,然后返回此圆圈中的标志.
这是API的这一部分我不知道如何创建,因为我不确定如何使用SQL创建这个不可见的圆并仅在此半径内选择点.
这可能吗?是否有MySQL空间函数可以帮助我做到这一点?
我相信该Buffer()函数可以做到这一点,但我找不到任何关于如何使用它的文档(例如示例SQL).理想情况下,我需要一个答案,告诉我如何使用此函数或最接近它.在我将这些坐标存储为地理空间点的地方,我应该使用地理空间函数来执行我要求的最大化效率.
旗帜表:
示例行:
1 | [几何 - 25B] | Tenacy AB
对于旗帜表我有纬度,经度位置和东向和北向(UTM)
用户的位置只是标准的纬度/经度,但我有一个可以将此位置转换为UTM的库
我们有一个餐厅餐桌,每行有一个长期数据.
我们需要编写一个执行搜索的查询来查找所提供半径内的所有餐馆,例如1英里,5英里等.
我们为此目的提供以下查询:
***Parameters***
Longitude: -74.008680
Latitude: 40.711676
Radius: 1 mile
***Query***
SELECT *
FROM restaurant
WHERE (
POW( ( 69.1 * ( Longitude - -74.008680 ) * cos( 40.711676 / 57.3 ) ) , 2 ) + POW( ( 69.1 * ( Latitude - 40.711676 ) ) , 2 )
) < ( 1 *1 );
Run Code Online (Sandbox Code Playgroud)
该表有大约23,000行.结果集的大小有时很奇怪,例如,对于5.4英里的搜索,它返回880行,对于5.5英里,它返回21k行.
此表包含nyc的餐馆数据 - 因此实际分布不是根据结果集.
问题:是否有任何错误使用此查询?
DB:MySQL,经度:DECIMAL(10,6),纬度:DECIMAL(10,6)
这是我第一次看地理位置.请原谅我的长话题.我希望很清楚.
我有一个数据库,用lat&lng保存记录.我正在尝试编写一个PHP类,它定义了四个十进制坐标,形成一个边界框(然后检索框内的所有记录).
我只需要知道哪些位置在用户位置的n km 范围内.我不需要从用户到位置的距离.
我正在建立这个答案的第一部分.
以上答案的核心是:
直线10公里是:
Run Code Online (Sandbox Code Playgroud)on the latitude is equal to ~1'(minute) on the longitude is equal to ~6'(minutes)以此为基础,进行一些快速数学运算,并在查询中添加WHERE子句,删除通过添加缓冲区创建的"框"之外的任何位置,假设为1'lat和6'long.
嗯,"做一些快速数学"帕特里克说.几天后我没能正确地完成数学计算.
我的班级挂在那里,似乎工作了10公里.但是,我没有让它与任何其他距离一起工作.
首先我移动到秒,所以10km是:
on the latitude is equal to 60 seconds
on the longitude is equal to 360 seconds
Run Code Online (Sandbox Code Playgroud)
这很好.
但是,我接着尝试了5km是:
on the latitude is equal to 30 seconds
on the longitude is equal to 180 seconds
Run Code Online (Sandbox Code Playgroud)
这没用.
你能解释为什么这种方法不适用于5km(以及我尝试的其他距离)吗?
下面是我的班级代码.显然这个开关是垃圾.任何帮助赞赏.
class coords
{
/*
Calculate a bounding box from a decimal coordinate and distance. …Run Code Online (Sandbox Code Playgroud) 我正在构建一个应用程序(在XCode中),在一般意义上,它向用户显示信息.信息作为单个对象存储在数据库中(恰好是由heroku托管的Parse服务器).用户可以选择"查看"在距当前位置的设定距离内创建的信息.(当保存到数据库时,信息与其lat和long一起保存,具体取决于用户启动保存时的位置).我知道我可以通过将他们的纬度和长度与观察用户的当前lat和long进行比较来过滤这些信息,只显示那些足够接近的信息.粗略/一般:
var currentUserLat = latitude //latitude of user's current location
var infoSet = [Objects] //set of all pulled info from DB
for info in infoSet{
if info.lat-currentUserLat < 3{//arbitrary value
//display the info
}else{
//don't display
}
}
Run Code Online (Sandbox Code Playgroud)
这个设置得足够好,而且运行正常.但它工作正常的原因是因为当前数据库中的条目数量很少(应用程序正处于开发阶段).在实际使用中(即许多用户),DB可能充满了信息对象(比如说,千元).在我看来,单独拉动和比较信息的纬度并将其与当前用户的每个数据库条目的纬度进行比较将花费太长时间.我知道必须有一种方法可以及时地做到这一点(想想更多...他们只显示附近的人的档案,尽管有数百万的档案,他们也不需要那么长的时间)但我不知道什么是最有效的.我想在数据库中为不同的地理区域创建单独的部分,然后根据用户当前位置的位置搜索数据库的那些特定部分,但这似乎并不复杂,但仍会导致大量信息被拉出.做这个的最好方式是什么?
在PHP中,我有以下代码来计算两个位置之间的距离:
<?php
function distance($lat1, $long1, $lat2, $long2) {
// DEGREE TO RADIAN
$latitude1 = $lat1/180*pi();
$longitude1 = $long1/180*pi();
$latitude2 = $lat2/180*pi();
$longitude2 = $long2/180*pi();
// FORMULA: e = ARCCOS ( SIN(Latitude1) * SIN(Latitude2) + COS(Latitude1) * COS(Latitude2) * COS(Longitude2-Longitude1) ) * EARTH_RADIUS
$distance = acos(sin($latitude1)*sin($latitude2)+cos($latitude1)*cos($latitude2)*cos($longitude2-$longitude1))*6371;
return $distance;
}
echo distance(9.9921962, 53.5534074, 9.1807688, 48.7771056); // Hamburg, DE - Stuttgart, DE
?>
Run Code Online (Sandbox Code Playgroud)
但是现在,我想从我的MySQL数据库中通过PHP选择靠近给定位置的位置:
我希望你能帮助我.提前致谢!
我正在尝试设计一个MySQL模式,可以存储具有相关纬度和经度的用户列表.
然后,对于给定的用户,我想建立一个查询,该查询可以将最近的50个用户返回给他/她并按距离对这些用户进行排序(最近的用户首先显示).
鉴于此表中可能有数千名用户,存储和查询此数据的最有效方法是什么?
好的 - 我已经和我一起打了大约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) mysql ×7
geolocation ×4
php ×4
sql ×3
geospatial ×2
gis ×2
coordinates ×1
database ×1
distance ×1
geo ×1
geography ×1
iphone ×1
javascript ×1
math ×1
proximity ×1
swift ×1
timezone ×1
wordpress ×1