网上是有很多经纬度精度为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();