提供一个谷歌(腾讯)、百度地图纠偏数据库

丽水市汽车运输集团股份有限公司信息中心 苟安廷

    在天朝特有的加偏让开发者不胜其烦,地图纠偏也就一直是开发者头疼,关于加偏、纠偏的详细描述网上一大堆,可以自己搜搜,这里简介一下,就是我们接收到的GPS坐标如果直接显示到电子地图上,和实际位置有很大的偏移,必须把GPS坐标加上一定的偏移量再显示到电子地图上才能反映真正的位置。纠偏的方法主要有两种:

    1.      地图厂商(或第三方)提供的在线接口,通常是通过webservice服务供调用,传入GPS坐标,返回地图坐标,这种方式的缺点很明显:(1)速度慢,难以满足大量数据并发,且由于网络等原因容易失败,(2)无法在数据库直接操作,比如需要将车辆运行轨迹批量返回。

    2.      纠偏数据库,地图加偏不是线性的,没有公式可套用,但同一区域的偏移量差不多,因此,我们按0.01度把中国版图划成不同的小区域,坐标落在哪个区域,就取出这个区域的偏移值,和GPS坐标相加就可以了,网上这类数据库通常是需要银子的。

    本人为工作方便,自己创建了谷歌(腾讯纠偏和谷歌完全一样)、百度两种地图的纠偏库,创建方法参考我的另外一篇博客构建自己的百度地图坐标纠偏数据库(http://blog.csdn.net/gatr/article/details/21520737),覆盖范围从东经73.5度~135度,北纬18~54度,完全可以满足日常需求了,参考范围如下:


    数据库采用了sqlserver 2005备份,你可以还原到sqlserver 2005或sql server2008上,其他版本的数据库那就无能为力了,只有先导入到sql server,再通过链接服务器导入吧。

    数据库只有一个表,结构包括经度、纬度、地图编号、经度偏移、纬度偏移几列,如下:

    经纬度均按百万分之一度存放,typeno表示地图类型,0表示谷歌(腾讯)地图,1表示百度地图,后面是对应的经纬度偏移量,作为示例,我还写了一个存储过程,根据传入的GPS坐标和地图类型,返回地图坐标:

CREATE PROCEDURE [dbo].[GetMapCoordinate]

    @Lng       INT,   --GPS坐标经度,百万分之一度

    @Lat       INT,   --GPS坐标纬度度,百万分之一度

    @MapTypeNo TINYINT    --地图编号,0:谷歌/腾讯,1:百度

AS

BEGIN

    SET NOCOUNTON;

    SELECT @Lng=@Lng+LngOffset,@Lat=@Lat+LatOffset

    FROM dbo.Offset

    WHERE lng=@Lng/10000*10000      --转换成.01

       AND lat=@Lat/10000*10000 --转换成.01

       AND typeno=@MapTypeNo

    SELECT @LngAS Lng,@Lat AS Lat

END

使用效果:

传入经度(120.123456)、纬度(28.123456)和地图编号(谷歌腾讯地图),返回对应的地图坐标,注意,都是百万分之一度,显示到地图上时,必须除以100万。

    如果你需要批量返回,可以用LEFT JOIN查询直接返回,你应该在自己的表中增加两个字段,存放GPS坐标对应的区域特征值,也就是将GPS坐标的经纬度分别精确到0.01度,或者说,你将GPS经纬度(百万分之一度)/10000*10000就得到了特征值,字段示意如下:

GPS经度

GPS纬度

经度特征值

纬度特征值

其他字段

120123456

28123456

120120000

28120000

    需要返回对应的百度地图坐标,参照下面的语法:

SELECT A.*,

A.GPS经度+ISNULL(B.LngOffset,0) AS地图经度,

A.GPS纬度++ISNULL(B.LatOffset,0) AS地图纬度

FROM MyTable A LEFT JOIN LngLatOffset B

ON A.经度特征值=B.lng AND A.经度特征值=B.lat AND B.typeno=1

上传成功后,我将在评论中给出下载链接。
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 31
    评论
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值