Javascript 256x256平铺中OSM像素的经度、纬度

Javascript 256x256平铺中OSM像素的经度、纬度,javascript,openstreetmap,Javascript,Openstreetmap,OpenStreetMap OSM有一个平铺服务器。平铺是特定缩放下的256x256世界图像 我有经度和纬度,我可以找到正确的瓷砖。 函数long2tilelon,zoom{return Math.floorlon+180/360*Math.pow2,zoom;} 函数lat2tilelat,zoom{return Math.floor1 Math.logMath.tanlat*Math.PI/180+1/Math.coslat*Math.PI/180/Math.PI/2*Math.pow2,z

OpenStreetMap OSM有一个平铺服务器。平铺是特定缩放下的256x256世界图像

我有经度和纬度,我可以找到正确的瓷砖。 函数long2tilelon,zoom{return Math.floorlon+180/360*Math.pow2,zoom;} 函数lat2tilelat,zoom{return Math.floor1 Math.logMath.tanlat*Math.PI/180+1/Math.coslat*Math.PI/180/Math.PI/2*Math.pow2,zoom;} var-zoom=4; var x=long2tile13.393562,缩放; 变量y=lat2tile52.519582,缩放; document.getElementById'a'.src='1〕https://tile.openstreetmap.org/“+zoom+'/'+x+'/'+y+'.png';
为此,您可以使用OpenLayers库,它可以为您管理所有类型的计算和转换:

const source=new ol.source.OSM; const grid=source.getTileGrid; const projectedCoordinate=Lonlat[13.393562,52.519582]的ol.proj.项目,EPSG:3857; const tilecord=grid.gettileCoordForCoordAndZProjectedCoord4/*缩放级别*/; const projectedExtent=grid.getTileCoordExtenttileCoord; const extent=ol.proj.transformExtentprojectedExtent,ol.proj.get'EPSG:3857',ol.proj.get'EPSG:4326'; 常数yWidth=范围[2]-范围[0]; 常数xWidth=范围[3]-范围[1]; const tileUrlFunction=source.getTileUrlFunction; const url=tileUrlFunctiontileCoord,1,ol.proj.get'EPSG:3857' 函数转换PIXELTOLONLATXpixel,yPixel{
如果!xPixel>=0&&xPixel=0&&yPixel您可以为此使用OpenLayers库,它可以为您管理所有类型的计算和转换:

const source=new ol.source.OSM; const grid=source.getTileGrid; const projectedCoordinate=Lonlat[13.393562,52.519582]的ol.proj.项目,EPSG:3857; const tilecord=grid.gettileCoordForCoordAndZProjectedCoord4/*缩放级别*/; const projectedExtent=grid.getTileCoordExtenttileCoord; const extent=ol.proj.transformExtentprojectedExtent,ol.proj.get'EPSG:3857',ol.proj.get'EPSG:4326'; 常数yWidth=范围[2]-范围[0]; 常数xWidth=范围[3]-范围[1]; const tileUrlFunction=source.getTileUrlFunction; const url=tileUrlFunctiontileCoord,1,ol.proj.get'EPSG:3857' 函数转换PIXELTOLONLATXpixel,yPixel{
如果!xPixel>=0&&xPixel=0&&yPixel则取整会产生差异

功能lo2tlon,缩放{ 返回lon+180/360*数学功率2,缩放; } 功能la2tlat,缩放{ 返回1-Math.logMath.tanlat*Math.PI/180+1/Math.coslat*Math.PI/180/Math.PI/2*Math.pow2,缩放; } 函数long2tilelon,zoom{return Math.floorlo2tlon,zoom;} 函数lat2tilelat,zoom{return Math.floorla2tlat,zoom;} 函数long2tfaclon,缩放{ 返回long2tlon,zoom-lo2tlon,zoom; } 功能lat2tfaclat,缩放{ 返回lat2tilelat,缩放la2tlat,缩放; } var-zoom=4; var x=long2tile13.393562,缩放; 变量y=lat2tile52.519582,缩放; document.getElementById'a'.src='1〕https://tile.openstreetmap.org/“+zoom+'/'+x+'/'+y+'.png'; var point=document.getElementById'point'; 变量pos=;;pos+=左:+long2tfac13.393562,缩放*-256; pos+=px;顶部:+lat2tfac52.519582,缩放*-256; point.setAttribute'style',point.getAttribute'style'+pos+'px;';
四舍五入就不同了

功能lo2tlon,缩放{ 返回lon+180/360*数学功率2,缩放; } 功能la2tlat,缩放{ 返回1-Math.logMath.tanlat*Math.PI/180+1/Math.coslat*Math.PI/180/Math.PI/2*Math.pow2,缩放; } 函数long2tilelon,zoom{return Math.floorlo2tlon,zoom;} 函数lat2tilelat,zoom{return Math.floorla2tlat,zoom;} 函数long2tfaclon,缩放{ 返回long2tlon,zoom-lo2tlon,zoom; } 功能lat2tfaclat,缩放{ 返回lat2tilelat,缩放la2tlat,缩放; } var-zoom=4; var x=long2tile13.393562,缩放; 变量y=lat2tile52.519582,缩放; document.getElementById'a'.src='1〕https://tile.openstreetmap.org/“+zoom+'/'+x+'/'+y+'.png'; var point=document.getElementById'point'; 变量pos=;;pos+=左:+long2tfac13.393562,缩放*-256; pos+=px;顶部:+lat2tfac52.519582,缩放*-256; point.setAttribute'style',point.getAttribute'style'+pos+'px;';
一个简单的方法是只使用反转函数。你已经有了平铺编号,将平铺编号转换为lat/lon的函数将为你提供左上角像素的坐标。还可以看看用于计算比例的函数。一个简单的方法是只使用反转函数。你已经有了平铺编号,用于lat/lon的平铺编号将为您提供左上角像素的坐标。还可以查看用于计算比例的函数。