diff --git a/mayfinal.js b/mayfinal.js index 000af72..f700297 100644 --- a/mayfinal.js +++ b/mayfinal.js @@ -82,6 +82,34 @@ function viewport2mplat(vx, vy) { return { x: mx, y: my }; } +function viewport2wgs84(vx, vy) { + const mlc = viewport2mplat(vx, vy); + //数据超界处理, 这里对应缩放等级的地图的大小是 + const limit = calTileSize() * Math.pow(2, zoom_level); + console.log(calTileSize()); + if (vx <= 0 || vy <= 0 || vx >= limit || vy >= limit) { + throw "OutMapRange"; + } + const lat = tile2lat(mlc.y / tilesize, zoom_level); + const lng = tile2long(mlc.x / tilesize, zoom_level); + return { lat: lat, lng: lng } +} + +function wgs84toviewport(lat, lng) { + //数据超界处理 经度 -180 180 + //85.0511287798066 (2*Math.atan(Math.pow(Math.E,Math.PI))-Math.PI/2)/Math.PI*180 + const latlimit = 85.051128; + const lngp = lng - Math.floor((lng + 180) / 360) * 360; + if (lat < (0 - latlimit) || lat > latlimit) { + throw "OutMapRange"; + } + const my = lat2y(lat, zoom_level) * tilesize; + const mx = lon2x(lngp, zoom_level) * tilesize; + const vp = mplat2viewport(mx, my); + return { x: vp.x, y: vp.y }; +} + + function updateviewporttest(scrollx, scrolly, oldz, newz) { //计算出缩放后坐标系的偏移值 // xv = xm + offset ; offset = xv - xm @@ -144,7 +172,9 @@ map.onmousedown = (e) => { moveflag = true; downpoing.x = e.offsetX; downpoing.y = e.offsetY; - console.log(coord.innerText); + console.log(zoom_level, e.offsetX, e.offsetY); + const wgs84 = viewport2wgs84(e.offsetX, e.offsetY); + console.log(wgs84, 'check', wgs84toviewport(wgs84.lat, wgs84.lng)); } map.onmouseup = (e) => { console.log('鼠标松开'); @@ -152,18 +182,11 @@ map.onmouseup = (e) => { } map.onmousemove = (e) => { //输出latlng - const mlc = viewport2mplat(e.offsetX, e.offsetY); - let lat = tile2lat(mlc.y / tilesize, zoom_level); - let lng = tile2long(mlc.x / tilesize, zoom_level); - // const etsize = calTileSize(); - // if (zoom_level != Math.floor(zoom_level)) { - // console.log('resize', etsize, tilesize, lat, lng) - // lat = tile2lat(mlc.y / etsize * tilesize, Math.floor(zoom_level + 1)); - // lng = tile2long(mlc.x / etsize * tilesize, Math.floor(zoom_level + 1)); - // } - - const coordstr = `(${e.offsetX},${e.offsetY}) - (${mlc.x.toFixed(3)},${mlc.y.toFixed(3)}) - (${lat},${lng})`; - coord.innerText = coordstr; + //const mlc = viewport2mplat(e.offsetX, e.offsetY); + //let lat = tile2lat(mlc.y / tilesize, zoom_level); + //let lng = tile2long(mlc.x / tilesize, zoom_level); + //const coordstr = `(${e.offsetX},${e.offsetY}) - (${mlc.x.toFixed(3)},${mlc.y.toFixed(3)}) - (${lat},${lng})`; + //coord.innerText = coordstr; //console.log(e.offsetX, e.offsetY); if (moveflag) { console.log('有效位移'); @@ -203,7 +226,7 @@ drawtest(); -Array.prototype.remove = function(val) { +Array.prototype.remove = function (val) { const index = this.indexOf(val); if (index > -1) { return this.splice(index, 1); @@ -284,7 +307,7 @@ function lon2tile(lon, z) { function lat2tile(lat, z) { return (Math.floor((1 - Math.log(Math.tan(lat * Math.PI / 180) + - 1 / Math.cos(lat * Math.PI / 180)) / Math.PI) / + 1 / Math.cos(lat * Math.PI / 180)) / Math.PI) / 2 * Math.pow(2, z))); } @@ -294,7 +317,7 @@ function lon2x(lon, z) { function lat2y(lat, z) { return ((1 - Math.log(Math.tan(lat * Math.PI / 180) + - 1 / Math.cos(lat * Math.PI / 180)) / Math.PI) / + 1 / Math.cos(lat * Math.PI / 180)) / Math.PI) / 2 * Math.pow(2, z)); }