嗨,我有下表
--------------------------------------------
| id | city | Latitude | Longitude |
--------------------------------------------
| 1 | 3 | 34.44444 | 84.3434 |
--------------------------------------------
| 2 | 4 | 42.4666667 | 1.4666667 |
--------------------------------------------
| 3 | 5 | 32.534167 | 66.078056 |
--------------------------------------------
| 4 | 6 | 36.948889 | 66.328611 |
--------------------------------------------
| 5 | 7 | 35.088056 | 69.046389 |
--------------------------------------------
| 6 | 8 | 36.083056 | 69.0525 |
--------------------------------------------
| 7 | 9 | 31.015833 | 61.860278 …Run Code Online (Sandbox Code Playgroud) 我有$latitude = 29.6815400和$longitude = 64.3647100,现在在MySQL我想借15个最近的地方,这些坐标,我打算做此查询:
SELECT *
FROM places
WHERE latitude BETWEEN($latitude - 1, $latitude + 1)
AND longitude BETWEEN($longitude - 1, $logintude + 1)
LIMIT 15;
Run Code Online (Sandbox Code Playgroud)
你认为这是正确的还是你建议别的吗?
怎么办BEETWEEN,因为我想搜索最近50Km范围的近处?
我忘了说我也可以在运行查询之前使用PHP做任何事情.
注意:我无法使用存储过程.
我有一个名为table的表flags,其中包含一个coordinates充满MySQL'points' 的列.我需要执行一个查询,我根据半径为100米的纬度和经度位置得到圆内的所有标志.
从使用的角度来看,这是基于用户的位置.例如,移动电话将给出用户的纬度和经度位置,然后将其传递给API的这一部分.然后由API在半径为100米的用户周围创建一个不可见的圆圈,然后返回此圆圈中的标志.
这是API的这一部分我不知道如何创建,因为我不确定如何使用SQL创建这个不可见的圆并仅在此半径内选择点.
这可能吗?是否有MySQL空间函数可以帮助我做到这一点?
我相信该Buffer()函数可以做到这一点,但我找不到任何关于如何使用它的文档(例如示例SQL).理想情况下,我需要一个答案,告诉我如何使用此函数或最接近它.在我将这些坐标存储为地理空间点的地方,我应该使用地理空间函数来执行我要求的最大化效率.
旗帜表:
示例行:
1 | [几何 - 25B] | Tenacy AB
对于旗帜表我有纬度,经度位置和东向和北向(UTM)
用户的位置只是标准的纬度/经度,但我有一个可以将此位置转换为UTM的库
这是这个问题的后续内容.
我似乎被困在这上面了.基本上,我需要能够在标准度系统中来回转换为参考坐标,或者通过沿着国际日期线测量从南极向北的距离,然后从该日期的那个点开始向东的距离线.要做到这一点(以及一些更常见的距离测量的东西),我有一种方法来确定两个纬度/经度点之间的距离,另一种方法是采用纬度/经度点,航向和距离,并返回该课程结束时的纬度/经度点.
以下是我定义的两种静态方法:
/* Takes two lon/lat pairs and returns the distance between them in kilometers.
*/
public static double distance (double lat1, double lon1, double lat2, double lon2) {
double theta = toRadians(lon1-lon2);
lat1 = toRadians(lat1);
lon1 = toRadians(lon1);
lat2 = toRadians(lat2);
lon2 = toRadians(lon2);
double dist = sin(lat1)*sin(lat2) + cos(lat1)*cos(lat2)*cos(theta);
dist = toDegrees(acos(dist)) * 60 * 1.1515 * 1.609344 * 1000;
return dist;
}
/* endOfCourse takes a lat/lon pair, a heading (in degrees clockwise from …Run Code Online (Sandbox Code Playgroud) 我正在开发一个应用程序,它应该显示位于特定距离的地址.我知道如何找到两点之间的距离,但问题是我不确定在性能方面什么是最好的方法.
一种方法是检索所有地址并逐一检查后端的选定地址,但有没有办法最小化我从数据库中检索的项目数,而不是使用内存?最好的做法是什么?如何做?
想象一下,我有300,000条记录,我必须全部检索它们并计算它们到选定点的距离吗?正如詹姆斯建议我可以在不同地区记录并计算距离,那么哪种方法可以遵循,通过查询或Java进行距离计算?
public class Address{
long Id;
Double latitude;
Double longitude;
..
}
Run Code Online (Sandbox Code Playgroud)
public static double distFrom(double lat1, double lng1, double lat2, double lng2) {
double earthRadius = 3958.75;
double dLat = Math.toRadians(lat2-lat1);
double dLng = Math.toRadians(lng2-lng1);
double sindLat = Math.sin(dLat / 2);
double sindLng = Math.sin(dLng / 2);
double a = Math.pow(sindLat, 2) + Math.pow(sindLng, 2)
* Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2));
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
double dist = earthRadius * c;
return dist;
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是我在数据库中有条目存储lat/long.我想计算用户lat/long和条目lat/long(在DB中)之间的距离.在那之后,我想回应距离小于500米的那些.到目前为止,我能够使用它foreach.
<?php
mysql_connect("localhost", "beepbee_kunwarh", "kunwar") or die('MySQL Error.');
mysql_select_db("beepbee_demotest") or die('MySQL Error.');
$Lat = $_REQUEST['Lat'];
$long = $_REQUEST['long'];
$query = mysql_query("SELECT a.*, 3956 * 2 * ASIN(SQRT( POWER(SIN(($Lat - Lat) * pi()/180 / 2), 2) + COS($Lat * pi()/180) * COS(Lat * pi()/180) *POWER(SIN(($long - long) * pi()/180 / 2), 2) )) as distance FROM userResponse GROUP BY beepid HAVING distance <= 500 ORDER by distance ASC;");
$data = array();
while ($row = mysql_fetch_array($query)) {
$data[] = $row; …Run Code Online (Sandbox Code Playgroud) 我有两张桌子:
Events:
- id
- name
- place
Places:
- id
- name
- lat
- lng
Run Code Online (Sandbox Code Playgroud)
我想从和10KM radius(基于地点lat&lng)检索所有事件.我怎样才能做到这一点?current latlng
谢谢!
我有一个遗留的innodb表列表,其中包含具有纬度/经度的业务.给定一个输入经/纬度(以下51.2167/4.41667),查询到的接近(千米)的顺序返回第一激活,激活,未删除30家企业.与帐户表的连接用于检查列表的有效性.
select
listing.*
from
listing listing ,
account account
where
listing.account_id = account.id
and listing.active = 1
and listing.approved = 1
and listing.deleted = 0
and listing.enabled = 1
and account.enabled = 1
and account.activated_by_user = 1
group by
listing.id
having
111.222569*degrees(acos(sin(radians(listing.latitude))*sin(radians( 51.2167)) +cos(radians(listing.latitude))*cos(radians( 51.2167))*cos(radians(listing.longitude - 4.41667)))) < 250
order by
111.222569*degrees(acos(sin(radians(listing.latitude))*sin(radians( 51.2167)) +cos(radians(listing.latitude))*cos(radians( 51.2167))*cos(radians(listing.longitude - 4.41667))))
limit 30;
Run Code Online (Sandbox Code Playgroud)
表列表和帐户每个包含超过50,000行,但查询仍然需要24秒才能运行.没有订单,需要17秒.
我已经尝试在活动,已批准,已删除,已启用时设置一些索引.我可以重写查询或添加某些索引来有效地执行此查询 - 而无需更改表结构吗?
+----+-------------+---------+-------------+-------------------------------------------------------------------------------------------------+-----------------------------------------------------------------+---------+------------------------+------+--------------------------------------------------------------------------------------------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref …Run Code Online (Sandbox Code Playgroud) 我有两个表,如下面的例子,towns并且things,需要得到一个城镇列表,这些城镇附近的东西x距离该城镇记录有一段距离.经度和纬度将用于进行距离计算.
我已经查看了其他一些问题,并设法从things一个指定城镇获取记录,但无法想到如何获得附近距离它们距离things较近的所有城镇的列表x.
能够通过x距离内的附近物品的数量对得到的城镇进行分类将是一个奖励.
TOWNS
+--------+----------+---------+---------+
| townId | townName | townLat | townLng |
+--------+----------+---------+---------+
| 1 | town a | 1.5 | 1.9 |
| 2 | town b | 1.4 | 3.8 |
| 3 | town c | 2.3 | 2.7 |
| 4 | town d | 3.2 | 1.6 |
| ... | ... | ... | ... |
+--------+----------+---------+---------+
THINGS …Run Code Online (Sandbox Code Playgroud) 我的方法requirement是使用mysql在给定的地图上计算两者distance之间的差。我在mysql中找到了一个名为ST_Distance_Sphere的函数,该函数返回球体上两个位置和/或多个位置之间的最小球面距离(以米为单位)。locations
当我使用ST_Distance_Sphere和lat_lng_distance函数计算两个位置之间的距离时,我发现ST_Distance_Sphere给出的距离与lat_lng_distance函数的距离不同 。
我的lat_lng_distance功能代码如下
CREATE FUNCTION `lat_lng_distance` (lat1 FLOAT, lng1 FLOAT, lat2 FLOAT, lng2 FLOAT)
RETURNS FLOAT
DETERMINISTIC
BEGIN
RETURN 6371 * 2 * ASIN(SQRT(
POWER(SIN((lat1 - abs(lat2)) * pi()/180 / 2),
2) + COS(lat1 * pi()/180 ) * COS(abs(lat2) *
pi()/180) * POWER(SIN((lng1 - lng2) *
pi()/180 / 2), 2) ));
END
Run Code Online (Sandbox Code Playgroud)
((38.898556,-77.037852),(38.897147,-77.043934))传递给ST_Distance_Sphere和 …
mysql ×8
sql ×4
geospatial ×3
distance ×2
php ×2
coordinates ×1
database ×1
geography ×1
geolocation ×1
hibernate ×1
indexing ×1
java ×1
range ×1
spring ×1