【问题标题】:Mapping location in MySQLMySQL中的映射位置
【发布时间】:2011-08-15 06:30:39
【问题描述】:

我有两张桌子:

1) 一个是从安卓手机保存的位置表,由用户名、纬度、经度、日期、时间组成。

2) 另一个是我保存国家、地区、省份、邮政编码、城市、纬度、经度的表格。

我想在插入数据库之前使用表 2) 映射表 1) 的位置(lat,lng)。 看起来很简单,但问题是表 2) 的位置只是一个稳定的点,否则表 1) 的位置是遍历每个城市的点。 因此,表 1) 的位置 与表 2) 的位置不相似

有人对这个问题有想法吗?任何公式或技术? 感谢您的帮助。

编辑:我在插入语句之前尝试了这个语句

$city  =  mysql_query("SELECT p.city
    FROM place AS p
    ORDER BY ACOS(SIN(p.lng)*SIN('".$lng."')+COS(p.lng)*COS('".$lng."')*COS(p.lat-'".$lat."'))",$con);

但是字段中的结果是Resource id #3,其他字段也这样显示。 c

【问题讨论】:

  • 对于表 1 中的每个点,通过按纬度/经度对之间的最小距离排序,找到表 2 中最近的位置。您可以在您最喜欢的几何教科书或搜索引擎中查找如何计算球面距离。只需将公式插入您的查询。
  • 这个公式:d = acos ( sin(x1) * sin(x2) + cos(x1) * cos(x2) * cos(y2- y1) ) * r,对吧?我会试试的,谢谢。
  • @Dan Grossman:我使用了这个公式,但结果看起来很奇怪。请参见上文,请告诉我我的错误是什么。欣赏。
  • "Resource id #3", mysql_query 返回一个资源,然后使用 $row = mysql_fetch_assoc($resource) 从该资源中读取一行,然后在 $row[' 中获取数据城市']

标签: mysql location latitude-longitude


【解决方案1】:

有点像:

SELECT regions.*
FROM users, regions
WHERE users.user_id = $user_id
ORDER BY 
  ACOS ( 
    SIN(users.long) * SIN(regions.long) + 
    COS(users.long) * COS(regions.long) * COS(regions.lat - users.lat) 
  )
LIMIT 1

添加于 2011 年 8 月 15 日

或者像你的例子一样在php中

$query  = "SELECT city
           FROM place
           ORDER BY
             ACOS(
               SIN(lng) * SIN({$lng}) +
               COS(lng) * COS({$lng}) * COS(lat - {$lat})
             )";
$resource = mysql_query($query);
$result = mysql_fetch_assoc($resource);
$city = $result['city'];

【讨论】:

  • @Puggen Se :我试过了,但结果与我预期的不一样。请看我上面的编辑。
【解决方案2】:

感谢您的每一个帮助。

$qc = mysql_query("SELECT *
    FROM place AS p
    ORDER BY MIN(ACOS(SIN(p.lng)*SIN({$lng})+COS(p.lng)*COS({$lng})*COS(p.lat-{$lat})))", $con);

while ($row = mysql_fetch_assoc($qc)) {
    $city = $row['city'];
    $district = $row['district'];
    $province = $row['province'];
    $region = $row['region'];
    $country = $row['country'];

    mysql_query("INSERT INTO " . $username . "_logs_" . $type . "(username,date,
                time,lat,lng,city,district,province,region,country,note,color)
                VALUES('".$username."','".$date."','".$time."',
                '".$lat."','".$lng."','".$city."','".$district."'
                ,'".$province."','".$region."','".$country."','unknown','unknown')", $con)
            or die("Cannot Insert to Table");
    mysql_close();
}

这是我的最终答案。我想分享给像我这样查询弱的人:))

【讨论】:

    猜你喜欢
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多