Leaflet 如何从用户输入的ArcGIS投影数据中求出分辨率阵列

Leaflet 如何从用户输入的ArcGIS投影数据中求出分辨率阵列,leaflet,arcgis,proj4js,Leaflet,Arcgis,Proj4js,我有一个基于传单的地图解决方案,使用用户提供的ArcGIS地图配置(我不知道会是什么,他们将使用自己的ArcGIS服务进行自定义)。问题是投影几乎可以是任何东西,我将需要使用Proj4Falique来相应地配置地图的CRS。我遇到的问题是我不确定如何计算比例/分辨率阵列。用户正在输入这些值:投影键、Proj4字符串、原点、边界、缩放级别 因此,例如(是的,我知道EPSG:3857是标准的,我可以使用L.CRS.EPSG3857,但它是如何使用Proj4Failure设置相同内容的一个很好的示例)

我有一个基于传单的地图解决方案,使用用户提供的ArcGIS地图配置(我不知道会是什么,他们将使用自己的ArcGIS服务进行自定义)。问题是投影几乎可以是任何东西,我将需要使用Proj4Falique来相应地配置地图的CRS。我遇到的问题是我不确定如何计算比例/分辨率阵列。用户正在输入这些值:投影键、Proj4字符串、原点、边界、缩放级别

因此,例如(是的,我知道EPSG:3857是标准的,我可以使用L.CRS.EPSG3857,但它是如何使用Proj4Failure设置相同内容的一个很好的示例):

有了这些,我想我有足够的钱为它建立一个L.Proj.CRS:

var crs = new L.Proj.CRS("EPSG:3857", "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext  +no_defs",
{
    resolutions : [?????],
    origin : [0,0],
    bounds : [[-20026376.39, -20048966.10], [20026376.39, 20048966.10]]
});

除了分辨率阵列之外,我还拥有我所需要的一切,我不确定如何根据给出的数据进行设置,并且很难找到答案,让我找到正确的方向。

所以底线是,我发现计算分辨率的唯一方法是,如果它是墨卡托投影,我们知道它的经度范围和瓷砖大小。否则,需要在ArcGIS Server tile Server REST端点上查找解析。因此,对于我的项目,我需要用户自己提供阵列,而不能为他们计算阵列

在墨卡托投影的例子中,我提出了一个函数来实现这个技巧:

function parseResolutionsFromZoomLevels(zoomLevels, tileSize, mapWGS84Extent)
{
    var metersPerExtent = 40075008/360;     
    var mapWGS84Meters = mapWGS84Extent*metersPerExtent;
    var resolutionArray = [];

    for (var i=0; i<zoomLevels; i++)
    {
        var tilesAtZoom = Math.pow(2,i);
        var pixelsAtZoom = tilesAtZoom*tileSize;

        resolutionArray.push(mapWGS84Meters/pixelsAtZoom);
    }

    return resolutionArray;
}
函数ParseResolutionsFromZoomLevel(ZoomLevel、tileSize、MapWGS84区段)
{
var metersPerExtent=40075008/360;
var MAPWGS84米=MAPWGS84米范围*米范围;
var resolutionArray=[];
对于(var i=0;i
function parseResolutionsFromZoomLevels(zoomLevels, tileSize, mapWGS84Extent)
{
    var metersPerExtent = 40075008/360;     
    var mapWGS84Meters = mapWGS84Extent*metersPerExtent;
    var resolutionArray = [];

    for (var i=0; i<zoomLevels; i++)
    {
        var tilesAtZoom = Math.pow(2,i);
        var pixelsAtZoom = tilesAtZoom*tileSize;

        resolutionArray.push(mapWGS84Meters/pixelsAtZoom);
    }

    return resolutionArray;
}