相关疑难解决方法(0)

使用mysql中的纬度和经度查找两点之间的距离

嗨,我有下表

 --------------------------------------------
 |  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)

mysql latitude-longitude

26
推荐指数
4
解决办法
5万
查看次数

SQL查询,按给定坐标选择最近的位置

我有$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做任何事情.

注意:我无法使用存储过程.

php mysql sql range coordinates

15
推荐指数
2
解决办法
3万
查看次数

使用MySQL空间扩展来选择圆内的点

我有一个名为table的表flags,其中包含一个coordinates充满MySQL'points' 的列.我需要执行一个查询,我根据半径为100米的纬度和经度位置得到圆内的所有标志.

从使用的角度来看,这是基于用户的位置.例如,移动电话将给出用户的纬度和经度位置,然后将其传递给API的这一部分.然后由API在半径为100米的用户周围创建一个不可见的圆圈,然后返回此圆圈中的标志.

这是API的这一部分我不知道如何创建,因为我不确定如何使用SQL创建这个不可见的圆并仅在此半径内选择点.

这可能吗?是否有MySQL空间函数可以帮助我做到这一点?

我相信该Buffer()函数可以做到这一点,但我找不到任何关于如何使用它的文档(例如示例SQL).理想情况下,我需要一个答案,告诉我如何使用此函数或最接近它.在我将这些坐标存储为地理空间点的地方,我应该使用地理空间函数来执行我要求的最大化效率.

旗帜表:

  • ID
  • 坐标
  • 名称

示例行:

1 | [几何 - 25B] | Tenacy AB

对于旗帜表我有纬度,经度位置和东向和北向(UTM)

用户的位置只是标准的纬度/经度,但我有一个可以将此位置转换为UTM的库

mysql sql geospatial

15
推荐指数
5
解决办法
2万
查看次数

地理空间坐标和以千米为单位的距离

这是这个问题的后续内容.

我似乎被困在这上面了.基本上,我需要能够在标准度系统中来回转换为参考坐标,或者通过沿着国际日期线测量从南极向北的距离,然后从该日期的那个点开始向东的距离线.要做到这一点(以及一些更常见的距离测量的东西),我有一种方法来确定两个纬度/经度点之间的距离,另一种方法是采用纬度/经度点,航向和距离,并返回该课程结束时的纬度/经度点.

以下是我定义的两种静态方法:

/* 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)

geography distance geolocation geospatial

14
推荐指数
2
解决办法
2万
查看次数

查找与所选点的特定距离内的所有地址的最佳方法是什么

我正在开发一个应用程序,它应该显示位于特定距离的地址.我知道如何找到两点之间的距离,但问题是我不确定在性能方面什么是最好的方法.

一种方法是检索所有地址并逐一检查后端的选定地址,但有没有办法最小化我从数据库中检索的项目数,而不是使用内存?最好的做法是什么?如何做?

想象一下,我有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)

这个问题 …

java mysql spring hibernate latitude-longitude

12
推荐指数
2
解决办法
2407
查看次数

如何在php中计算lat/long的距离?

我想要做的是我在数据库中有条目存储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)

php latitude-longitude

10
推荐指数
4
解决办法
5万
查看次数

SQL选择基于纬度经度的半径搜索

我有两张桌子:

Events:
 - id
 - name
 - place

Places:
 - id
 - name
 - lat
 - lng
Run Code Online (Sandbox Code Playgroud)

我想从和10KM radius(基于地点lat&lng)检索所有事件.我怎样才能做到这一点?current latlng

谢谢!

mysql sql

6
推荐指数
2
解决办法
1万
查看次数

使用纬度/经度索引mysql表以进行地理查找

我有一个遗留的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)

mysql database indexing geospatial latitude-longitude

5
推荐指数
1
解决办法
4622
查看次数

选择附近有城市的城镇

我有两个表,如下面的例子,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)

mysql distance

5
推荐指数
1
解决办法
58
查看次数

mysql中的ST_Distance_Sphere无法提供两个位置之间的准确距离

我的方法requirement是使用mysql在给定的地图上计算两者distance之间的差。我在mysql中找到了一个名为ST_Distance_Sphere的函数,该函数返回球体上两个位置和/或多个位置之间的最小球面距离(以米为单位)。locations

当我使用ST_Distance_Spherelat_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 sql mysql-workbench

5
推荐指数
1
解决办法
4557
查看次数