编码折线算法C#
来源:互联网 发布:手机淘宝店铺二维码 编辑:程序博客网 时间:2024/05/01 21:46
class GPolyline2 { /** * 处理有符号整数 * * @param point * @return */ private static string encodeSignedNumber(int point) { // 对二进制低位补0 int _point_int = point << 1; // 如果原来的数是负数则求反,取其补码 if (point < 0) { _point_int = ~_point_int; } return (encodeNumber(_point_int)); } /** * 处理无符号整数 * * @param num * @return */ private static string encodeNumber(int num) { string resultstring = ""; while (num >= 0x20) { int _block = num & 0x1F; _block = (_block | 0x20) + 63; char _result = (char)_block; resultstring += _result; num >>= 5; } resultstring += (char)(num + 63); return resultstring; } ///** // * 计算编码级别 // * // * @param line // * @return // */ //public static string encodeLevel(string line) //{ // int level = 3;// 设置编码级别 // string encodeLel = encodeNumber(level);// 计算出编码级别,因为预先固定,考虑效率问题,只计算一次 // string result = ""; // string[] pointsStr = line.Split(';'); // foreach (string pointStr in pointsStr) // { // result += pointStr; // } // // System.out.println("2level: " + result.tostring()); // return result; //} /** * 计算编码折线 * * @param line * @return */ public static string createEncodings(string line) { string _result = ""; int plat = 0; int plng = 0; string[] _points = line.Split(';');// 每个经纬度坐标值以";"分隔 foreach (string pointStr in _points) { string[] _latlng = pointStr.Split(',');// 经纬度值之间以","分隔 double lat = Double.Parse(_latlng[0]); double lng = Double.Parse(_latlng[1]); int late5 = (int)Math.Floor(lat * 1e5); int lnge5 = (int)Math.Floor(lng * 1e5); int dlat = late5 - plat; int dlng = lnge5 - plng; plat = late5; plng = lnge5; _result += encodeSignedNumber(dlat) + encodeSignedNumber(dlng); } // System.out.println("2bianma--->" + _result); return _result; } // Decode an encoded polyline into a list of lat/lng tuples. public static string decodeLine (string encoded) { int len = encoded.Length; int index = 0; string array = ""; double lat = 0; double lng = 0; while (index < len) { int b; int shift = 0; int result = 0; do { b = encoded[index++] - 63; result |= (b & 0x1f) << shift; shift += 5; } while (b >= 0x20); int dlat = ((result & 1) !=0 ? ~(result >> 1) : (result >> 1)); lat += dlat; shift = 0; result = 0; do { b = encoded[index++] - 63; result |= (b & 0x1f) << shift; shift += 5; } while (b >= 0x20); var dlng = ((result & 1)!=0 ? ~(result >> 1) : (result >> 1)); lng += dlng; array += lat * 1e-5 + "," + lng * 1e-5 + ";"; } array.Remove(array.Length - 1); return array; } //// Decode an encoded levels string into a list of levels. //public static string decodeLevels(string encoded) //{ //string levels= ""; //for (var pointIndex = 0; pointIndex < encoded.Length; ++pointIndex) { // var pointLevel = encoded[pointIndex] - 63; // levels += pointLevel; //} //return levels; //} }
存档。
- 编码折线算法C#
- 编码折线算法
- 编码折线算法格式
- Google Maps API 编码折线算法实现
- Google Maps API 编码折线算法实现
- Google Map 编码折线算法Java实现
- Google 地图折线编码解码算法(Javascript实现)
- 基于折线生成平行线的C#算法实现
- C# 画折线图
- C#画折线图一例
- C#绘制折线图
- C#绘制折线
- C#折线图
- C#折线图
- C# 做折线统计图
- C#显示折线图
- google_map_api_折线算法
- 折线等分算法
- 选中工程升级ADT到22后,编译失败
- IOS中的tableview
- android媒体--stagefright概述【一】
- sdcms的一个bug,总是提示,该文件不允许被上传
- mmu 基本概念
- 编码折线算法C#
- 关于Java Socket和创建输入输出流的几点注意
- UVa 10074 - Take the Land
- 大数阶乘
- iCheck:超级精美的自定义复选框 & 单选按钮
- 十大已过时的技能
- 英文投稿的一点经验
- sensor__HAl分析(头文件)
- Android 生命周期及task及代码助手