Wie berechnet man die Skala der aktuellen Zoomstufe mit Parametern wie Ausdehnung, Auflösung?

8

Ich habe folgende Parameter:

Width and height of Map: 450px, 560px

units : 'meters'

maxExtent : new OpenLayers.Bounds(806677.9759,802420.9858,8876817.5647,853497.8186405064)

resolutions: [199.51887828322785, 99.75943914161392, 49.87971957080696, 
24.93985978540348, 12.46992989270174, 6.23496494635087, 3.117482473175435, 
1.5587412365877176, 0.7793706182938588, 0.3896853091469294, 0.1948426545734647, 
0.09742132728673235, 0.048710663643366174, 0.024355331821683087, 0.012177665910841544,
0.006088832955420772, 0.003044416477710386, 0.001522208238855193]

numZoomLevels: 18

OpenLayers.DOTS_PER_INCH = 90.71428571428572;

Wer inspiriert mich, wie man die Skala der aktuellen Zoomstufe berechnet?

Brady
quelle

Antworten:

14

Der Kartenmaßstab ist definiert als ein Verhältnis von displayed units / measured units. Ihr spezieller Fall ist etwas schwieriger, da wir zwei Skalen und zwei verschiedene Einheiten durchlaufen müssen, um zu den Einheiten der realen Welt zu gelangen.

Angenommen, die horizontale Skalierung entspricht der vertikalen Skalierung, betrachten wir zunächst die horizontale Pixelauflösung . Auf diese Weise versuchen wir, die angezeigten Pixeleinheiten zu finden:

scale = display / measured

      = feature / pixels

      = |(806677m - 876817m)| / 450px // I'm assuming you've made a typo with 8876817

      = 70140 / 450

      = 166.66 metres per pixel (inversely 0.006 pixels per metre)

Zweitens: Konvertieren der Pixelskala, um den Bildschirmabstand pro Pixel zu ermitteln:

      = real distance / pixel distance

      = 2.54cm (1 inch) / 90 pixels

      = 0.028 ~0.03

Alles zusammenbringen:

   0.028 cm per pixel = 166.66 metres / x

   x * 0.028 = 166.66

   x = 166.66 / 0.028

   x = 5952.1

Daher beträgt Ihr Kartenmaßstab ungefähr 1: 6000.

Nagytech
quelle
Sehr geschätzt für Ihre äußerst detaillierte Beschreibung. Ich werde es nach deinem Weg berechnen. Vielen Dank.
Brady
Kein Problem. Wenn Sie die Skala wiederholt berechnen, möchten Sie möglicherweise die Gleichung verdichten. Ich habe es nur der Einfachheit halber für Sie geschichtet.
Nagytech
Haha, ja! Eigentlich möchte ich wissen, wie hoch die Zoomstufe für den Maßstab '1: 3500' ist. Weil einige Ebenen in meiner Karte nur angezeigt werden, wenn der aktuelle Maßstab größer als "1: 3500" ist. Übrigens bin ich neu in GIS.
Brady
1
Es besteht (natürlich) eine starke Abhängigkeit davon, den richtigen Pixelabstand zu erhalten. Es wird also nicht die gleiche "Skala" auf Ihrem Notebook und dem angeschlossenen Projektor sein.
BradHards
4
Es gibt einen Fehler in der Antwort von Nagytech, weil er m pro Pixel mit cm pro Pixel vergleicht! Zuerst müssen Sie die 0,028 cm in Meter umrechnen! Sie haben also 0,00028 Meter und eine Skala von x = 166,66 / 0,00028 = 595214!
Marcel
9

Auf der Peter Robins- Website finden Sie gute Informationen, die Ihnen bei Openlayern leicht helfen können.

Um die Skala zu finden, die eine Auflösung darstellt, müssen Sie wissen, wie groß ein Pixel ist. OL weiß das nicht genau, macht aber einige vernünftige Annahmen. Wenn Sie sich Util.js ansehen und nach getScaleFromResolution () suchen, werden Sie feststellen, dass es zwei Konstanten verwendet, INCHES_PER_UNIT und DOTS_PER_INCH, und die Berechnung lautet "Auflösung * OpenLayers.INCHES_PER_UNIT [Einheiten] * OpenLayers.DOTS_PER_INCH". Für Grad ist dies die Auflösung * 4374754 * 72 (314.982.288), daher beträgt der maximale Maßstab 1: 442.943.843. In Metern beträgt der maximale Maßstab 156543,0339 * 39,3701 * 72 (2,834,6472) oder 1: 443,744,273.

so die Formel:

 map.getResolutions * OpenLayers.INCHES_PER_UNIT[units] * OpenLayers.DOTS_PER_INCH

ich hoffe es hilft dir ...

Aragon
quelle
In OpenLayers map.getResolutions funktionierte 2.14 bei mir nicht, aber das Aufrufen der Auflösungen der Basisschicht hat : map.baseLayer.resolutions.
Beachten Sie