手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:geo

关于mongo的GEO相关笔记

很乱。我自己明白即可,三种查询条件。

{loc:{"$near":[121.417397,31.204075]} }
{loc : {"$within" : {"$center" : [ [121.417397,31.204075], 5]}} }
db.places.find({loc:{ $near:[ 30.28009,120.12857],$maxDistance:5}}).limit(20)

上述的内容参考与某个网站,它的基本内容如下:

最近一直在做基于LBS的项目,地标的坐标索引和基于坐标查询,一直没找到一种简单方便的方法,在做mongo索引优化的时发现竟然有Geo的索引
创建字段
建议使用方式:{ loc : [ longitude , latitude] }
也可以:{ loc : { lon :longitude, lat:latitude } }
Loc自己决定,我用poi的
建立索引
注意:每个Collection只能建立一个geospatial索引
db.places.ensureIndex( { loc : “2d” } , { min : -500 , max : 500 } )
如果db.places.ensureIndex( { loc : “2d” }),
默认值的范围是:-180到180,也就是经纬度的范围
查询
注:1.默认会按距离排序;
    2.转换 111.12 距离(一度是大约 111.12 公里)使用公里,或由 69 (对于英里)
默认取100条距离最近的点,注:默认是limit(100)
db.collection.find({loc:{$near :[ 30.28009,120.12857]}})
取正方形范围的坐标点,注意:5是坐标系的5,也就是经纬度的5,按111.12换算成公里
db.places.find({loc:{ $near:[ 30.28009,120.12857],$maxDistance:5}}).limit(20)
取指定半径的点,注意:半径5是坐标系的5,也就是经纬度的5,按111.12换算成公里
以5为半径的圆:{“Coordinate” : {“$within” : {“$center” : [ [30.28009,120.12857], 5]}} }
---------

纯笔记,别多想,测试了一下。比现在使用的好多了,我现在是:
        $criteria->order = new \CDbExpression("ACOS(SIN(({$lat} * 3.1415) / 180 ) *SIN((lat * 3.1415) / 180 ) +COS(({$lat} * 3.1415) / 180 ) * COS((lat * 3.1415) / 180 ) *COS(({$lng} * 3.1415) / 180 - (lng * 3.1415) / 180 ) ) * 6380  asc,last_activity_time DESC");

不要多想,我是用的Yii的玩意,也是一个笔记。

Tags: mongo, geo

关于GEO的备份资料

一些关于GEO的备份资料
1、google相对比较开放了查询地址的接口,免费用户每天可以查询好多次了。一般不会超出吧?

新功能!Google Geocoding API 的功能进行了显著升级和增强。本文将介绍这一最新版的 Google Geocoding API (V3)。请注意,原来的Google Geocoding API V2 已经弃用。使用该服务的用户应升级到此版本。

注意:Google Geocoding API 不再需要 Google Maps API 密钥!
Google Maps API Premier 用户还需要使用新的加密密钥为其网址签名。有关详细信息,请参见 Premier 文档

多好的功能啊。参考:http://code.google.com/intl/zh-CN/apis/maps/documentation/geocoding/

2、根据IP获取实际地址:
这个其实都不准,我看到相对比较准的,可以算是google,但这方面google并没有接口(在firefox打开部分网页时,会提示你是否愿意分享你的地址,如果你愿意,你会发现,google地图很容易获取你的地址,相对比较准确。算上偏移量,基本上就是实际地址了。。。)
http://developer.yahoo.com/yql/
这里我贴的是YQL,YQL中 有个GEO库,试了一下,偏的认不到家了。
看了一下,他实际上用的是这个接口:http://geoip.pidgets.com/?ip=202.96.209.133
有JSON和XML两种返回值,参考:http://geoip.pidgets.com?ip=202.96.209.133&format=[json|xml]

其他一些参考资料:

  1. Google地图大数据量处理的探讨
  2. 百度地图API】——国内首款团购网站的地图插件
  3. [Google Map]畫線(GPolyline)(想象一下京东的快递线路图)

纯记录,因为会用到根据 IP查询经纬度,所以先备份

 

Tags: geo