Рассчитайте масштаб с учетом ограничительной рамки, ширины и высоты изображения - PullRequest
0 голосов
/ 13 февраля 2012

Мне нужно рассчитать масштаб, учитывая ограничивающий прямоугольник в координатах карты (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.

1 Ответ

1 голос
/ 13 февраля 2012

Длина каждой стороны ортогональной географической области следующая:

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. Преобразование из градусов в радианы это просто r = pi / 180.0. Единицами результата являются те единицы измерения, которые вы используете для окружностей. Стороны север-юг имеют одинаковую длину, размеры восток-запад различаются в зависимости от широты и длины протяженности север-юг, следовательно, три значения, а не два или четыре.

Чтобы рассчитать масштаб, вам, вероятно, понадобится только одно из этих значений, я предлагаю значение lengthNorthSouth, поскольку оно не требует триггерных функций и, следовательно, не переводит в радианы (делим на 360 вместо 2 * pi в этом случае). 1007 *

Длина одной стороны, деленная на соответствующую длину стороны изображения, даст масштаб.

Географические расчеты обязательно являются приблизительными, и проекция карты может использовать, например, различные окружные значения, поэтому вам придется определить ближайший предпочтительный масштаб для определения предполагаемого масштаба. Вычтите вычисленную шкалу из каждой предпочтительной шкалы по очереди, чтобы определить шкалу с наименьшей абсолютной (уберите знак) разницей.

...