0

我需要计算地图坐标中给定边界框的比例(EPSG:900913)和图像的宽度/高度。

这是因为我实现了一个非常基本的 WMS 服务器,但在某些时候我需要知道图像的比例。

一个简单的请求是:

  wms.exe?LAYERS=all&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&FORMAT=image%2Fjpeg&SRS=EPSG%3A900913&BBOX=-7810029.800979,-2298920.0623849,-7809724.0528659,-2298614.3142718&WIDTH=256&HEIGHT=256

该请求源自使用以下参数配置的网页中的 openlayer 组件:

var optionsGmap = {
projection: new OpenLayers.Projection("EPSG:900913"),
units: "m",
sphericalMercator: true,
numZoomLevels: 16,
maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34, 20037508.34, 20037508.34),
scales : [110936068.185464,55468034.0927321,27734017.0463661,13867008.523183,6933504.26159152,
    3466752.13079576,1733376.06539788,866688.03269894,433344.01634947,216672.008174735,108336.004087367,54168.0020436837,27084.0010218419,
    13542.0005109209,6771.00025546046,3385.50012773023],
maxResolution: "auto" };

有公式来计算这个吗?我可以在后端访问 postgres+posgis,但我更喜欢自己在 C 代码中进行计算。

4

1 回答 1

2

正交地理区域的每一边的长度如下:

lengthEastWestNorth = (east - west) * ((equatorial_circumference * cos(north)) / (2*pi) ) ;
lengthEastWestSouth = (east - west) * ((equatorial_circumference* cos(south)) / (2*pi)) ;
lengthNorthSouth = (north - south) * (polar_circumference/(2*pi)) ;

请注意,东、西、北、南是以弧度为单位的长/纬度角,因为这是 C 中的三角函数所<math.h>需要的。从度数到弧度的转换只需 r = pi/180.0。结果的单位是您用于圆周的任何单位。南北边长度相等,东西尺寸因纬度而异,南北范围的长度不同,因此三个值不是两个或四个。

要计算比例,您可能只需要其中一个值,我建议使用该lengthNorthSouth值,因为它不需要三角函数,因此不需要转换为弧度(在这种情况下除以 360 而不是 2*pi)。

一侧的长度除以图像的相应边长将产生比例。

地理计算必然是近似值,例如地图投影可能使用不同的圆周值,因此您必须确定最接近的首选比例才能确定预期比例。依次从每个首选比例中减去计算出的比例,以确定绝对(去除符号)差异最小的比例。

于 2012-02-13T07:49:31.513 回答