[C#]利用纠偏数据来处理地球坐标(WGS-84)与火星坐标(GCJ-02)转换

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

关键代码:

usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.IO;usingYanZhiwei.DotNet2.Utilities.Models;namespaceYanZhiwei.DotNet2.Utilities.Common

{/// <summary>/// 地图纠偏数据帮助类/// </summary>publicclassMapOffsetDataHelper

{#region构造函数以及变量PRivatestringoffsetFullPath =string.Empty;/// <summary>/// 构造函数/// </summary>/// <param name="path">纠偏数据文件路径</param>publicMapOffsetDataHelper(stringpath)

{

offsetFullPath = path;

}#endregion#region私有方法privatevoidGetOffsetData(Action<MapCoord> mapCoordHanlder)

{using(FileStream stream =newFileStream(offsetFullPath, FileMode.OpenOrCreate, Fileaccess.Read))

{using(BinaryReader reader =newBinaryReader(stream))

{int_size = (int)stream.Length / 8;for(inti = 0; i < _size; i++)

{byte[] _source = reader.ReadBytes(8);

MapCoord _coord = ToCoord(_source);

mapCoordHanlder(_coord);

}

}

}

}/// <summary>/// 将字节转化为具体的数据对象/// </summary>/// <param name="bytes">bytes</param>/// <returns>MapCoord</returns>privateMapCoord ToCoord(byte[] bytes)

{//经度,纬度,x偏移量,y偏移量 【均两个字节】MapCoord _coord =newMapCoord();byte[] _b1 =newbyte[2], _b2 =newbyte[2], _b3 =newbyte[2], _b4 =newbyte[2];

Array.Copy(bytes, 0, _b1, 0, 2);

Array.Copy(bytes, 2, _b2, 0, 2);

Array.Copy(bytes, 4, _b3, 0, 2);

Array.Copy(bytes, 6, _b4, 0, 2);

_coord.Lon = BitConverter.ToInt16(_b1, 0);

_coord.Lat = BitConverter.ToInt16(_b2, 0);

_coord.X_off = BitConverter.ToInt16(_b3, 0);

_coord.Y_off = BitConverter.ToInt16(_b4, 0);return_coord;

}#endregion#region获取纠偏数据集合/// <summary>/// 获取纠偏数据集合/// </summary>/// <returns>纠偏数据集合</returns>publicList<MapCoord> GetMapCoordList()

{

List<MapCoord> _mapCoordList =newList<MapCoord>();

GetOffsetData(c => _mapCoordList.Add(c));return_mapCoordList;

}/// <summary>/// 获取纠偏数据集合/// </summary>/// <returns>纠偏数据集合</returns>publicArrayList GetMapCoordArrayList()

{

ArrayList _mapCoordArrayList =newArrayList();

GetOffsetData(c => _mapCoordArrayList.Add(c));return_mapCoordArrayList;

}#endregion}

}

-----------------------------------------------------------------------------------------------

usingSystem.Collections;usingYanZhiwei.DotNet2.Utilities.Models;usingYanZhiwei.DotNet2.Utilities.Tool;namespaceYanZhiwei.DotNet2.Utilities.Common

{/// <summary>/// 地图纠偏 帮助类/// </summary>publicclassMapOffsetHelper

{/**参考:*1.http://www.apkbus.com/forum.php?mod=viewthread&tid=137621&extra=page%3D1&page=1*2.http://yanue.net/post-122.html*3.http://go2log.com/2011/08/30/%E4%B8%AD%E5%9B%BD%E5%9C%B0%E5%9B%BE%E5%81%8F%E7%A7%BB%E6%A0%A1%E6%AD%A3php%E7%AE%97%E6%B3%95/*4.http://www.devdiv.com/ios_gps_google_-blog-60266-10835.html*/#region构造函数以及变量privateArrayList mapCoordArrayList;/// <summary>/// 构造函数/// </summary>/// <param name="offsetData">纠偏数据</param>publicMapOffsetHelper(ArrayList offsetData)

{

mapCoordArrayList = offsetData;

}#endregion#region私有方法privateMapCoord QueryOffSetData(LatLngPoint point)

{

MapCoord _search =newMapCoord();

_search.Lat = (int)(point.LatY * 100);

_search.Lon = (int)(point.LonX * 100);

MapOffsetComparer rc =newMapOffsetComparer();int_findedIndex = mapCoordArrayList.BinarySearch(0, mapCoordArrayList.Count, _search, rc);

MapCoord _findedCoord = (MapCoord)mapCoordArrayList[_findedIndex];return_findedCoord;

}#endregion#region地球坐标(WGS-84)转火星坐标 (GCJ-02)/// <summary>/// 地球坐标(WGS-84)转火星坐标 (GCJ-02)/// </summary>/// <param name="wgsPoint">地球坐标(WGS-84)</param>/// <returns>火星坐标 (GCJ-02)</returns>publicLatLngPoint WGS84ToGCJ02(LatLngPoint wgsPoint)

{

MapCoord _findedCoord = QueryOffSetData(wgsPoint);double_pixY = MapHelper.LatToPixel(wgsPoint.LatY, 18);double_pixX = MapHelper.LonToPixel(wgsPoint.LonX, 18);

_pixY += _findedCoord.Y_off;

_pixX += _findedCoord.X_off;double_lat = MapHelper.PixelToLat(_pixY, 18);double_lng = MapHelper.PixelToLon(_pixX, 18);returnnewLatLngPoint(_lat, _lng);

}#endregion#region火星坐标转 (GCJ-02)地球坐标(WGS-84)/// <summary>/// 火星坐标转 (GCJ-02)地球坐标(WGS-84)/// </summary>/// <param name="gcjPoint">火星坐标转 (GCJ-02)</param>/// <returns>地球坐标(WGS-84)</returns>publicLatLngPoint GCJ02ToWGS84(LatLngPoint gcjPoint)

{

MapCoord _findedCoord = QueryOffSetData(gcjPoint);double_pixY = MapHelper.LatToPixel(gcjPoint.LatY, 18);double_pixX = MapHelper.LonToPixel(gcjPoint.LonX, 18);

_pixY -= _findedCoord.Y_off;

_pixX -= _findedCoord.X_off;double_lat = MapHelper.PixelToLat(_pixY, 18);double_lng = MapHelper.PixelToLon(_pixX, 18);returnnewLatLngPoint(_lat, _lng);

}#endregion}

}

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航