zoukankan      html  css  js  c++  java
  • OpenLayers中地图缩放级别的设置方法

    一、概述

    在OpenLayers中,地图必须具有一个缩放级别的范围,缩放级别可以用比例尺(scale)或者分辨率(resolution)表示。

    比例尺——屏幕上1米代表多少地图坐标单位(度或者米);分辨率——屏幕上一个像素代表多少地图坐标单位。
    两者的转换关系是:scale = resolution * 72 * 39.3701(1米=39.3701英寸,1英寸=72像素,有的是1英寸=96像素,这里我也没弄清楚咋回事,72或者96代表72dpi、96dpi,如果是瓦片的话可以通过看瓦片图像来确定dpi)

    地图具有一个总的缩放级别,每个图层可以有各自的缩放级别,这样可以控制图层只在合适的级别上显示。

    二、缩放级别范围的确定方法

    1、比例尺数组或者分辨率数组来确定(相邻两级之间不一定是2倍的关系,可以是任意值)。示例:

    resolutions: [1.40625,0.703125,0.3515625,0.17578125,0.087890625,0.0439453125]
    scales: [50000000, 30000000, 10000000, 5000000]

    2、用最大分辨率(maxResolution)和缩放级别总数(numZoomLevels)确定,相邻两级是2倍关系

    2.1最大分辨率的确定方法:

    a. 直接指定maxResolution,例如:

    maxResolution: 0.17578125

    b. 直接指定minScale,例如:

    minScale: 50000000

    c. 由maxExtent确定(maxResolution需设置为‘auto’),例如:

    maxExtent: new OpenLayers.Bounds(-180, -90, 180, 90),
    maxResolution: "auto"

    2.2 缩放级别总数的确定方法:

    a.  直接指定numZoomLevels,例如:numZoomLevels: 5
    b.  由最大分辨率和最小分辨率的比值确定,最小分辨率同2.1有三种方法可以确定:

        b.1 直接指定minResolution
        b.2 直接指定maxScale
        b.3 由minExtent确定(minResolution需设置为‘auto’)

    如果指定的参数过多,导致缩放级别范围不一致时,上述方法顺序决定了OpenLayers确定缩放级别范围的优先级。

    GeoServer中先根据符号大小计算分辨率,再根据分辨率计算sld中的比例尺

    分辨率=相邻两点间实际距离(米)/符号大小(像素):即resolution=distance/symbol

    根据分辨率计算sld中的比例尺:scale = (distance/symbol)* 72 * 39.3701

    举例子:设distance=0.8,符号大小为8、16、32、64、128、256
    第一级:
    R1=0.8/8=0.1
    s1=

    R2=0.8/16=0.05

  • 相关阅读:
    李永乐说股票
    01 什么是基金
    基金分享
    02 基金分类
    03 买什么基金合适
    06丨MongoDB基本操作
    详解大端模式和小端模式
    在UIViewController中获得Container View里的embed viewController的引用
    iphone Dev 开发实例10:How To Add a Slide-out Sidebar Menu in Your Apps
    iphone Dev 开发实例9:Create Grid Layout Using UICollectionView in iOS 6
  • 原文地址:https://www.cnblogs.com/zhaoyanhaoBlog/p/9026354.html
Copyright © 2011-2022 走看看