var points = []; // Add a point to the points list. function addPoint() { var lat = document.getElementById('txtLatitude').value; var pLat = parseFloat(lat); if (pLat.toString() != lat) { alert('无效的纬度输入!请输入 -90 到 90 之间的数值。'); return; } if (pLat < -90 || pLat > 90) { alert('无效的纬度输入!请输入 -90 到 90 之间的数值。'); return; } var lng = document.getElementById('txtLongitude').value; var pLong = parseFloat(lng); if (pLong.toString() != lng) { alert('无效的经度输入!请输入 -180 到 180 之间的数值。'); return; } if (pLong < -180 || pLong > 180) { alert('无效的经度输入!请输入 -180 到 180 之间的数值。'); return; } var level = document.getElementById('txtLevel').value; var pLevel = parseInt(level); if (pLevel.toString() != level) { alert('无效的最小缩放级别输入!请输入 0 到 3 之间的整数。'); return; } if (pLevel < 0 || pLevel > 3) { alert('无效的最小缩放级别输入!请输入 0 到 3 之间的整数。'); return; } createPoint(lat, lng, pLevel); createEncodings(); } // Creates a point and adds it to both the polyline and the list. function createPoint(lat, lng, pLevel) { addPointItem(lat, lng, pLevel); var newPoint = { Latitude: lat, Longitude: lng, Level: pLevel }; points.push(newPoint); } // Add an option to the points list with the specified information. function addPointItem(lat, lng, pLevel) { var displayPoint = new Option('(' + lat + ',' + lng + ') Level: ' + pLevel, points.length); document.getElementById('pointList').options.add(displayPoint); } // Encode a signed number in the encode format. function encodeSignedNumber(num) { var sgn_num = num << 1; if (num < 0) { sgn_num = ~(sgn_num); } return(encodeNumber(sgn_num)); } // Encode an unsigned number in the encode format. function encodeNumber(num) { var encodeString = ""; while (num >= 0x20) { encodeString += (String.fromCharCode((0x20 | (num & 0x1f)) + 63)); num >>= 5; } encodeString += (String.fromCharCode(num + 63)); return encodeString; } // Create the encoded polyline and level strings. function createEncodings() { var i = 0; var plat = 0; var plng = 0; var encoded_points = ""; var encoded_levels = ""; for(i = 0; i < points.length; ++i) { var point = points[i]; var lat = point.Latitude; var lng = point.Longitude; var level = point.Level; var late5 = Math.floor(lat * 1e5); var lnge5 = Math.floor(lng * 1e5); dlat = late5 - plat; dlng = lnge5 - plng; plat = late5; plng = lnge5; encoded_points += encodeSignedNumber(dlat) + encodeSignedNumber(dlng); encoded_levels += encodeNumber(level); } document.getElementById('encodedLevels').value = encoded_levels; document.getElementById('encodedPolyline').value = encoded_points; }