如何根据经纬仪向强度推算出经纬仪宽度及排列...

一、MySql不使用空间函数,简单版
1.粗算,根据场景得到一个range,计算经纬度,得到的是一个矩形区域(A),不精确,但是已经有范围这个雏形了,最容易实现的方式之一。
where latitude&y-range
and latitude&y+range
and longitude&x-range
and longitude &x+range
order by abs(longitude -x)+abs(latitude -y)&
2.使用PHP函数计算出距离,排序即可。
排序的话,自己灵活实现。很多语言都有封装排序算法,效率也挺高的。
二、Mysql不使用空间函数,优化版
这里的优化是对(一)中range的优化。根据范围半径,计算出经纬度的变化范围,得到一个比较准确的range,这里的范围(B)是圆形的(因为$radius是俩点间的距离)。
但是筛选时候的范围(C)是矩形,所以精确上来说, 圆B是矩形C的内切圆,不在圆B但是在矩形C中的点也会出现在我们的SQL结果中。但是已经比(一)要好很多了。
$radius = 1;
$rangeLat = 180 / pi() * $radius / ;
$rangeLng = $rangeLat / cos($x * pi() / 180.0);
$maxLat = $x + $range;
$minLat = $x - $range;
$maxLng = $y + $lngR;
$minLng = $y - $lngR;
我见过把这个计算带入到SQL中的,一大串SQL,这种计算本来就不是SQL该有的,不推荐这样做。
三、MySql使用空间函数
在(二)中,我们得到了4个点。这个就是矩形范围,我们只要判断是否在这个矩形内就好了。其实用到mysql的空间函数可以支持任意多边形。还支持索引优化,注意myisam才能建立空间索引。
优化程序将调查可用的空间索引是否能包含在使用某些函数的查询搜索中,如WHERE子句中的MBRContains()或MBRWithin()函数。--19.6.2. 使用空间索引
这里的核心思想就是用一个范围判断某个点是否在这个范围内。在数据库有一个类型为geometry的列g。
select id,AsText(g) from geom
where MBRContains(GeomFromText('Polygon((x0 y0,x1 y0,x1 y1,x0 y1,x0 x0))'),g);
即可准确筛选出在这个范围内的点。即使后面跟ORDER BY限制距离性能也没有太大影响。
SELECT id, AsText(g), SQRT(POW( ABS( X(g) - X(x)), 2) + POW( ABS(Y(g) - Y(y)), 2 )) AS distance
FROM geom[*1]
WHERE MBRIntersects(g, GeomFromText('Polygon((x0 y0,x1 y0,x1 y1,x0 y1,x0 x0))'))[*2]
AND SQRT(POW( ABS( X(g) - X(x)), 2) + POW( ABS(Y(g) - Y(y)), 2 )) & radius[*3]
ORDER BY [*4]
1:从geom表中根据俩点间的距离公式计算结果,命名为distance2:条件1,g列中的点和算出来的范围相交!相交!相交!注意我用的是MBRIntersects(),不是MBRContains()3:条件2,distance小于给定的半径radius4:根据distance排序
上面是根据官方文档写的示例代码,比较重要,如果你没看懂,没关系,我来举个栗子
这里选用MBRContains()来举例子,你可以自己实验下MBRWithin()函数,注意参数顺序就好了,我这里得到的结果是一样的。
函数用法:MBRContains(g1,g2)
函数说明:返回1或0以指明g1的最小边界矩形是否包含g2的最小边界矩形函数已经说明了是g1是否包含g2,所以不要弄反了;这里的矩形支持任意多变形
目标点:D(1,1)也可以是范围哟,见注释*1
范围:E(0 0,0 3,3 3,3 0,0 0),闭合矩形,其实支持任意闭合多边形
SELECT id,name
where MBRContains(GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),
&&&&&&&&&&&&&&&&&&GeomFromText('Point(1 1)'));[*1]
1:这里的目标点D也支持任意多边形,参数不再是Point()而是Polygon()
这条SQL可以解释为判断点D是否在范围内E。
SELECT id,name,AsText(g)[*1]
where MBRContains(GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))'),
&&&&&&&&&&&&&&&&&&g);
1:因为g列是geometry类型的,所以要用AsText转换下再展现出来
这条SQL可以解释为列出数据库中所有包含在范围E中的点。
更多相交、包含、接触等方法见上面开发文档 《19.5.5.&关于几何最小边界矩形(MBR)的关系》
四、geohash
这个GeoHash是将二维的经纬度转换成字符串,字符串长度越长,精度就越精细。俩个字符串长度匹配的位数越多,就越接近,绝大部分情况看起来是这个样子的,但有例外。
类似于:|J 我|K |
因为GeoHash是将区域划分为一个个规则矩形,所以在同一个矩形中,GeoHash是一样的,但是会出现一个边际问题:G、H俩个左右相邻的矩形,我在G的右边际处(右边际和H相邻),餐厅J在G的左边际,餐厅K也在H的左边际,通过GeoHash得出来的结果是餐厅J离我更近,显然不合理。
可以通过加大矩形区域的精细程度和扩大相似范围解决。
根据匹配相应的位数,在mysql加入索引,可以极大提高效率。GeoHash和经纬度的转换,网上都有现成的代码,这里不再展示,PHP还有对应的C拓展能提高计算速度。
*在纬度相等的情况下:
&*经度每隔0.00001度,距离相差约1米;
&*每隔0.0001度,距离相差约10米;
&*每隔0.001度,距离相差约100米;
&*每隔0.01度,距离相差约1000米;
&*每隔0.1度,距离相差约10000米。
&*在经度相等的情况下:
&*纬度每隔0.00001度,距离相差约1.1米;
&*每隔0.0001度,距离相差约11米;
&*每隔0.001度,距离相差约111米;
&*每隔0.01度,距离相差约1113米;
&*每隔0.1度,距离相差约11132米。
Geohash,如果geohash的位数是6位数的时候,大概为附近1千米。
五、Redis GeoHash
Redis也能玩定位?
sure!并且效率奇高!
虽然也是通过GeoHash(高性能、高精度版)来实现的,但是它封装了很多有用的方法,直接使用经纬度即可操作,能直接根据距离返回对应的点,支持直接返回json,还支持排序输出。
毕竟是Redis,持久化和容量都是要考虑的问题。
但是Redis从来不是孤军奋战的工具。
可以和MySql搭配,放在数据库前扛着,里面存储高频定位点,MySql也支持定位(方案三),合理使用应该很好的MySql定位解决方案了。
以上就是根据现有资料整理的MySql经纬度经纬解决方案,如果有更好的方案,欢迎评论区讨论。
本文由创作,本文可自由转载、引用,但需署名作者且注明文章出处。
原文地址:
阅读(...) 评论()请问有没有什么办法根据经纬度来确定出海拔高度,批... - 问通信专家
已解决问题
请问有没有什么办法根据经纬度来确定出海拔高度,批量计算。
请问有没有什么办法根据经纬度来确定出海拔高度,批量计算。单个基站的经纬度可以通过GOOGLE地图搜索来查对应的海拔高度,但大量的基站这样搜素比较麻烦,有没软件能批量导入经纬度来导出相应基站的海拔高度。
提问者: &提问时间: &
• 经纬度计算最近10个基站怎么做?
• 根据两点经纬度计算两点间距离
• 有没有经纬度计算距离的工具
• 谁有经纬度距离计算小工具,给我发一个,谢谢.
• 怎么利用经纬度计算距离
• position service,每次上报的是计算后的经纬度,还是三点定位的距离每个小区的码片长度呢?
• 经纬度计算距离的好方法
其他答案&(0)
• 经纬度计算最近10个基站怎么做?
• 根据两点经纬度计算两点间距离
• 有没有经纬度计算距离的工具
• 谁有经纬度距离计算小工具,给我发一个,谢谢.
• 怎么利用经纬度计算距离
• position service,每次上报的是计算后的经纬度,还是三点定位的距离每个小区的码片长度呢?
• 经纬度计算距离的好方法
相关资料下载
<font color="#35人关注
<font color="#680人关注
<font color="#48人关注
<font color="#45人关注
<font color="#018人关注
<font color="#43人关注
<font color="#31人关注
<font color="#57人关注
<font color="#91人关注
<font color="#2人关注
聘: 需求人数:20 人
地点:浙江省,安徽省
聘: 需求人数:10 人
地点:北京市
聘: 需求人数:4 人
地点:贵阳市
聘: 需求人数:10 人
地点:海口市,三亚市
聘: 需求人数:1 人
地点:海口市
聘: 需求人数:10 人
地点:海外
聘: 需求人数:10 人
地点:浙江省
聘: 需求人数:3 人
地点:肇庆市
聘: 需求人数:2 人
地点:昆明市
聘: 需求人数:10 人
地点:甘肃省,山西省,新疆
赞助商链接
Powered by如何根据经纬度跨度来计算中国版图的面积 - 爱问知识人
(window.slotbydup=window.slotbydup || []).push({
id: '2491531',
container: s,
size: '150,90',
display: 'inlay-fix'
版图的面积
您的举报已经提交成功,我们将尽快处理,谢谢!
当气温达35~39摄氏度时人就感到奇热;而当气温高于40摄氏度时,人们便觉得“赤日炎炎似火烧”了。
  人到底有多大的耐热潜力?科学家通过试验表明:在...
===================开始=====================
&#039; VBS Script Generated by AriesChen....
在地球仪上,同赤道平行的线叫“纬线”。纬线指示东西方向,赤道是地球上最大的纬线圈,越往两极,纬线圈越小,到两极就缩成点了。为了区别每一条纬线,人们给纬线也标注了...
可以,下载单机版。输入2点经纬度,会出现两个图针,量一下两点距离就行了。
其实没必要这么麻烦,经纬度都知道了,还用量嘛。直接算就行了。
使用地图,通过内插法确定,另一种方法,也是最精确的,就是按照谷歌地球:
大家还关注}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信