地图纠偏(火星坐标转wgs-84坐标/wgs-84坐标转火星坐标)

本文介绍了一种经纬度纠偏方法及其在不同精度下的应用。提供了0.1和0.01精度的纠偏数据库,分别适用于内存资源有限的平台和高精度需求的应用场景。同时分享了一个坐标转换类库,支持高效查询并实现火星坐标与WGS84坐标的相互转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网上是有很多经纬度精度为0.1的纠偏数据库,其大小大约为3M不到,数据源条数10万条不到。如果应用于ria,android或iphone倒是不错,只是数据精度相对低了一些。本人比对过纠偏后大约会偏差0.0001个数量级。以1度偏差大约相当实际距离111km来算,偏差值为0.0001*111000=11.1m左右。

另外令网上还有很多经纬度为0.01的纠偏数据库,如果包括全国的话其大小将近480M(小于这个数的肯定只是全国的部分数据),数据源条数900万条差不多吧。虽然纠偏的效果确实很好(偏差值为0.00003*111000=3.33m左右),但把它应用于内存比较宝贵的平台上,就不可取了。

本人写了个两种坐标相互转换的类库,并将数据源进行了压缩,以二进制字节流形式写进dat文件。

0.1偏差数据库大小为2.65M,0.01偏差数据库大小为74.8M,而且对数据结构进行优化,以优异的算法提高查询效率。相比通过查询纠偏数据库会更优。

另外,将火星坐标转换回wgs84经纬度坐标,纠偏数据源也是一个dat文件,大小大约4.67M

[插个广告:如有需要http://item.taobao.com/item.htm?spm=686.1000925.1000774.6.kPwBNf&id=16891721656]

实例:

            double x = 0.0;
            double y = 0.0;
            double xx = 0.0;
            double yy = 0.0;
            Console.WriteLine(string.Format("转      换:{0},{1}", 121.529511809335,31.3040797824361));
            Console.WriteLine(string.Format("->预期结果:{0},{1}", 121.533851623535, 31.3020216901361));//正确纠偏后值


            Wgs2MarsHigh.Parse(121.529511809335, 31.3040797824361, ref x, ref y);
            Console.WriteLine(string.Format("->0.01精度纠偏转换结果:{0},{1}", x, y));


            Wgs2Mars.Parse(121.529511809335, 31.3040797824361, ref x, ref y);
            Console.WriteLine(string.Format("->0.1精度纠偏转换结果: {0},{1}", x, y));

            Console.WriteLine("");

            Console.WriteLine(string.Format("转      换:{0},{1}", 121.514754295361, 31.3016871248306));
            Console.WriteLine(string.Format("->预期结果:{0},{1}", 121.5191316604612, 31.29965653523061));//正确纠偏后值


            Wgs2MarsHigh.Parse(121.514754295361, 31.3016871248306, ref x, ref y);
            Console.WriteLine(string.Format("->0.01精度纠偏转换结果:  {0},{1}", x, y));
      
            //将火星坐标转会wgs-84坐标
            Mars2Wgs.Parse(x, y, ref xx, ref yy);
            Console.WriteLine(string.Format("->0.01精度逆纠偏转换结果:{0},{1}", xx, yy));


            Wgs2Mars.Parse(121.514754295361, 31.3016871248306, ref x, ref y);
            Console.WriteLine(string.Format("->0.1精度纠偏转换结果:   {0},{1}", x, y));

            //将火星坐标转会wgs-84坐标
            Mars2Wgs.Parse(x, y, ref xx, ref yy);
            Console.WriteLine(string.Format("->0.1精度逆纠偏转换结果: {0},{1}", xx, yy));
            Console.ReadKey();

           

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leesmn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值