作者steveko (计画)
看板Database
标题Fw: [请益] 资料库计算经纬度问题
时间Sat Jun 23 12:11:19 2012
※ [本文转录自 PHP 看板 #1FvK6v7p ]
作者: steveko (计画) 看板: PHP
标题: [请益] 资料库计算经纬度问题
时间: Sat Jun 23 12:10:29 2012
想请教有关利用两个资料表来计算经纬度的问题
第一个资料表包含了商家的"名称","电话","地址","邮递区号","商家位置的经度"与
"商家位置的纬度"
第二个资料表只包含"邮递区号","经度","纬度"(这里的经纬度为各邮递区号的中心点)
我想做个搜寻的功能,让使用者输入邮递区号,就可以查出此邮递区号范围10公里
以内的商家
例如我输入邮递区号"106",就利用第二个资料表的邮递区号106中心点经纬度,去跟
第一个资料表的商家经纬度去做计算,mysql出来的结果即为所求.
但是想了很久还是想不出一个解决的方法,以下是我唯一想到的,但是跑不出来,
不知道各位高手有没有什麽解决方法???
$zip = "zipcode.zip";
$zip1 = "steve.zip";
$lng = "zipcode.lng";
$lat = "zipcode.lat";
$lng1 = "steve.lng";
$lat1 = "steve.lat";
$sql_query = "SELECT * FROM `steve` JOIN `zipcode` on $zip=$zip1
where $zip1 like "使用者输入的邮递区号"
IN (SELECT * FROM `steve` JOIN `zipcode` on $zip=$zip1
where (2 * 6378.137* ASIN(SQRT(POW(SIN(PI() * ($lat1 – $lat)
/ 360), 2) + COS(PI() * $lat1 / 180)* COS($lat* PI() / 180) *
POW(SIN(PI() * ($lng1 – $lng) / 360), 2)))) <= 10)
";
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.224.201.21
※ 发信站: 批踢踢实业坊(ptt.cc)
※ 转录者: steveko (61.224.201.21), 时间: 06/23/2012 12:11:19
1F:→ iFEELing:table2的值是固定的 何妨先算好? 06/23 15:11
2F:→ iFEELing:同理 table1资料进来的时候也可以先算好 06/23 15:13
3F:→ iFEELing:别把DB当AP SERVER用吧... 06/23 15:14
4F:→ tedcat:你可以考虑建个view去把邮递区号跟十公尺的先算好 06/23 16:57
5F:→ iFEELing:view也是要找的时候现场算 这种不变的资料直接写TABLE吧 06/23 22:32
6F:→ iFEELing:每家店对应的区号就那几个 算一次存好再查不是省时省力? 06/23 22:33
7F:→ tedcat:第一个店加资料肯定会随时间而有变动啊,不可能另存成table 06/24 15:57
8F:→ iFEELing:店家的地址不变 会MATCH的区号是固定的 新增时算好就可 06/24 21:28
9F:→ iFEELing:不需要每次QUERY都算半天经纬度附近有包到哪些店 06/24 21:29
10F:→ iFEELing:在table 1加一个栏位存有MATCH到的区号 到时再捞就好了吧 06/24 21:31
11F:→ iFEELing:这种动态算的作法是传入的经纬度不固定的时候才需要这样 06/24 21:32