Как реализовать геодезическую опцию для надстройки Scale Bar в OpenLayers 2?

Я использую надстройку Scale Bar из OpenLayers 2, и у нее нет геодезической опции.

Я знаю, что у Scale Line есть геодезическая опция, но, учитывая, что у Scale Bar есть более широкий выбор опций, было бы неплохо также ввести геодезическую опцию в этой.

Может ли кто-нибудь помочь мне с этим? Как я могу ввести геодезическую опцию в аддоне Scale Bar?

Спасибо

1 ответ

Решение

Я думаю, что я решил это.

Прежде всего, я добавил геодезическую опцию, чтобы пользователь мог выбирать, хочет он геодезические меры или нет.

Во-вторых, я создал эту функцию (на основе ScaleLine):

getGeodesicRatio: function() {
    var res = this.map.getResolution();
    if (!res) {
        return;
    }

    var curMapUnits = this.map.getUnits();
    var inches = OpenLayers.INCHES_PER_UNIT;

    // convert maxWidth to map units
    var maxSizeData = this.maxWidth * res * inches[curMapUnits];
    var geodesicRatio = 1;
    if(this.geodesic) {
        var maxSizeGeodesic = (this.map.getGeodesicPixelSize().w ||
            0.000001) * this.maxWidth;
        var maxSizeKilometers = maxSizeData / inches["km"];
        geodesicRatio = maxSizeGeodesic / maxSizeKilometers;
    }
    return geodesicRatio;
},

В-третьих, я вставил геодезическое соотношение в другие функции:

"getComp"
var ppdu = OpenLayers.DOTS_PER_INCH * system.inches[unitIndex]
    / this.getGeodesicRatio() / this.scale;

"setSubPros"
var ppdu = OpenLayers.DOTS_PER_INCH * system.inches[unitIndex]
    / this.getGeodesicRatio() / this.scale;

Я надеюсь, что это полезно.

Другие вопросы по тегам