Genauere Methode zur Berechnung der Rasterfläche

11

In meiner täglichen Arbeit werde ich ständig gebeten, Bereiche globaler Raster-Datensätze in geografischer Projektion mit einer Auflösung von 30 Bogensekunden zu berechnen. Diese Datensätze sind normalerweise das Ergebnis einer Kombinationsoperation (ein typisches Beispiel sind Vegetationsklassen in Kombination mit einer Länderschicht). Zu diesem Zweck erstellte unsere Einheit einen Raster-Datensatz mit der Fläche jedes Pixels in geografischer Projektion bei 30 Bogensekunden. Mit diesem Flächenraster wird eine Zonenstat durchgeführt, um die Flächen für jede Klasse zu summieren. Da ich nicht sicher bin, wie dieses Flächenraster erstellt wurde, habe ich mich immer gefragt, ob dieser Ansatz genauer ist, wenn das Raster nur in einer flächengleichen Projektion neu projiziert wird (nach einfachen Tests sind die Ergebnisse der beiden Methoden ähnlich). Hat jemand eine ähnliche Situation erlebt?

Gianluca Franceschini
quelle
@radouxju Sie scheinen zu behaupten, dass das von mir zitierte Bugayevskiy & Snyder-Handbuch weder glaubwürdig noch offiziell ist. (Im Gegenteil, es ist beides - insbesondere angesichts der Tatsache, dass es aus einer Zusammenarbeit von weltweit anerkannten Behörden in den USA und Russland resultiert!) Was ist die Grundlage dieser Skepsis? Was würden Sie mehr suchen? Beachten Sie auch, dass diese Berechnungen absolut genau sind. Die Genauigkeit ist nur durch die Genauigkeit der Ellipsoidparameter und durch die Genauigkeit Ihrer Berechnungen begrenzt: Eine höhere Genauigkeit ist nicht möglich.
whuber
@whuber Ich habe nicht vorgeschlagen, dass Ihr Zitat nicht glaubwürdig war. Mein Kommentar mit dem Kopfgeld wurde gemacht, BEVOR Sie geantwortet haben, und als ich das letzte Mal auf die Website kam, war es zu früh, um das Kopfgeld zu vergeben.
Radouxju
@radouxju Danke für deine Erklärung! Ich wurde erst Stunden nach der Veröffentlichung der Antwort auf das Kopfgeld aufmerksam.
whuber

Antworten:

14

Es gibt eine relativ einfache exakte Formel für die Fläche eines sphärischen Vierecks, das durch Parallelen (Breitengrade) und Meridiane (Längengrade) begrenzt ist. Sie kann einfach unter Verwendung der grundlegenden Eigenschaften der Ellipse (der Hauptachse a und der Nebenachse b ) abgeleitet werden, die um ihre Nebenachse gedreht wird, um das Ellipsoid zu erzeugen. (Die Ableitung ist eine schöne integrale Kalkülübung, aber ich glaube, dass sie auf dieser Site von geringem Interesse ist.)

Die Formel wird vereinfacht, indem die Berechnung in grundlegende Schritte unterteilt wird.

Erstens ist der Abstand zwischen der Ost- und Westgrenze - den Meridianen 10 und 10 - ein Bruchteil eines ganzen Kreises gleich q = (l1 - 10) / 360 (wenn die Meridiane in Grad gemessen werden) oder 1 = ( l1 - l0) / (2 * pi) (wenn die Meridiane im Bogenmaß gemessen werden). Finden Sie die Fläche des gesamten Slice zwischen den Parallelen f0 und f1 und multiplizieren Sie diese einfach mit q .

Zweitens werden wir eine Formel für die Fläche einer horizontalen Schicht des Ellipsoids verwenden, die durch den Äquator (bei f0 = 0) und eine Parallele bei der Breite f (= f1) begrenzt ist. Die Fläche der Schicht zwischen zwei beliebigen Breiten f0 und f1 (auf derselben Halbkugel liegend) ist der Unterschied zwischen der größeren und der kleineren Fläche.

Vorausgesetzt, das Modell ist wirklich ein Ellipsoid (und keine Kugel), ist die Fläche einer solchen Schicht zwischen dem Äquator und der Parallele bei Breitengrad f gegeben durch

area(f) = pi * b^2 * (log(zp/zm) / (2*e) + sin(f) / (zp*zm))

wo aund bsind die Längen der Haupt- und Nebenachse der erzeugenden Ellipse,

e = sqrt(1 - (b/a)^2)

ist seine Exzentrizität, und

zm = 1 - e*sin(f); zp = 1 + e*sin(f)

(Dies ist viel einfacher als das Berechnen mit Geodäten, die ohnehin nur Annäherungen an die Parallelen sind. Bitte beachten Sie den Kommentar von @cffk bezüglich einer Methode zur Berechnung log(zp/zm)auf eine Weise, die Präzisionsverluste in niedrigen Breiten vermeidet.)

Zahl

area(f) ist die Fläche der undurchsichtigen Schicht vom Äquator bis zum Breitengrad f (in der Abbildung etwa 30 Grad nördlich. X und Y sind geozentrische kartesische Koordinatenachsen, die als Referenz gezeigt werden.

Verwenden Sie für das Ellipsoid WGS 84 die konstanten Werte

a = 6 378 137 meters,  b =  6 356 752.3142 meters,

mit sich bringen

e = 0.08181919084296

(Für ein sphärisches Modell mit a = b wird die Formel unbestimmt. Sie müssen von oben eine Grenze als e -> 0 nehmen, die sich dann auf die Standardformel reduziert 2 * pi * a^2 * sin(f).)

Nach diesen Formeln hat ein 30 'mal 30' großes Viereck basierend auf dem Äquator eine Fläche von 3077,2300079129 Quadratkilometern, während ein 30 'mal 30' großes Viereck, das einen Pol berührt (der eigentlich nur ein Dreieck ist), eine Fläche von nur 13,6086152 Quadrat hat Kilometer.

Zur Kontrolle ergeben die Formeln, die auf alle Zellen eines 720 x 360-Gitters angewendet werden, das die Erdoberfläche bedeckt, eine Gesamtoberfläche von 4 * pi * (6371.0071809) ^ 2 Quadratkilometer, was anzeigt, dass der authalische Radius der Erde 6371.0071809 Kilometer betragen sollte. Dies unterscheidet sich vom Wikipedia-Wert nur in der letzten signifikanten Zahl (etwa einem Zehntel Millimeter). (Ich denke, die Berechnungen von Wikipedia sind ein wenig falsch :-).

Als zusätzliche Überprüfung habe ich Versionen dieser Formeln verwendet, um die Anhänge 4 und 5 in Lev M. Bugayevskiy und John P. Snyder, Kartenprojektionen: Ein Referenzhandbuch (Taylor & Francis, 1995) zu reproduzieren . Anhang 4 zeigt Bogenlängen von 30 'langen Abschnitten von Meridianen und Parallelen, angegeben auf den nächsten Meter. Eine Stichprobe der Ergebnisse ergab eine perfekte Übereinstimmung. Ich habe dann die Tabelle mit Schritten von 0,0005 'anstelle von Schritten von 0,5' neu erstellt und die mit diesen Bogenlängen geschätzten Viereckbereiche numerisch integriert. Die Gesamtfläche des Ellipsoids wurde mit mehr als acht signifikanten Zahlen genau wiedergegeben. Anhang 5 zeigt die Werte area(f)für f = 0, 1/2, 1, ..., 90 Grad, multipliziert mit 1 / (2 * pi). Diese Werte werden auf den nächsten Quadratkilometer angegeben. Eine visuelle Überprüfung von Werten nahe 0, 45 und 90 Grad zeigte eine perfekte Übereinstimmung.


Diese genaue Formel kann unter Verwendung der Rasteralgebra angewendet werden, beginnend mit einem Gitter, das die Breiten der oberen Grenzen jeder Zelle angibt, und einem anderen, das die Breiten der unteren Grenzen angibt. Jedes davon ist im Wesentlichen ein y-Koordinatengitter. (In jedem Fall möchten Sie möglicherweise sin(f)und dann zmund zpals Zwischenergebnisse erstellen .) Subtrahieren Sie die beiden Ergebnisse, nehmen Sie den absoluten Wert davon und multiplizieren Sie ihn mit dem im ersten Schritt erhaltenen Bruchteil q (gleich 0,5 / 360 = 1/720) zum Beispiel für eine Zellenbreite von 30 '). Dies ist ein Raster, dessen Werte die exakten Werte enthaltenBereiche jeder Zelle (bis zur eigenen numerischen Genauigkeit des Gitters). Stellen Sie nur sicher, dass Sie die Breiten in der von der Sinusfunktion erwarteten Form ausdrücken: Viele Rasterrechner geben Ihnen Koordinaten in Grad an, erwarten jedoch Bogenmaß für ihre Triggerfunktionen!


Für die Aufzeichnung sind hier die genauen Bereiche von 30 'mal 30' Zellen auf dem WGS 84-Ellipsoid vom Äquator bis zu einem Pol in Intervallen von 30 'bis 11 Ziffern (dieselbe Zahl, die für den kleinen Radius b verwendet wird ):

3077.2300079,3077.0019391,3076.5458145,3075.8616605,3074.9495164,3073.8094348,3072.4414813,3070.8457347,3069.0222870,3066.9712434,3064.6927222,3062.1868550,3059.4537865,3056.4936748,3053.3066912,3049.8930202,3046.2528597,3042.3864209,3038.2939285,3033.9756204,3029.4317480,3024.6625762,3019.6683833,3014.4494612,3009.0061153,3003.3386648,2997.4474422,2991.3327939,2984.9950800,2978.4346744,2971.6519646,2964.6473522,2957.4212526,2949.9740951,2942.3063230,2934.4183938,2926.3107788,2917.9839636,2909.4384482,2900.6747464,2891.6933866,2882.4949115,2873.0798782,2863.4488581,2853.6024374,2843.5412166,2833.2658109,2822.7768503,2812.0749792,2801.1608571,2790.0351582,2778.6985716,2767.1518013,2755.3955665,2743.4306011,2731.2576543,2718.8774905,2706.2908892,2693.4986451,2680.5015685,2667.3004848,2653.8962347,2640.2896746,2626.4816763,2612.4731271,2598.2649300,2583.8580035,2569.2532818,2554.4517149,2539.4542684,2524.2619238,2508.8756783,2493.2965451,2477.5255533,2461.5637477,2445.4121891,2429.0719545,2412.5441367,2395.8298444,2378.9302026,2361.8463521,2344.5794500,2327.1306692,2309.5011988,2291.6922441,2273.7050264,2255.5407830,2237.2007674,2218.6862492,2199.9985139,2181.1388633,2162.1086151,2142.9091030,2123.5416769,2104.0077025,2084.3085615,2064.4456516,2044.4203864,2024.2341953,2003.8885234,1983.3848318,1962.7245972,1941.9093120,1920.9404843,1899.8196375,1878.5483108,1857.1280585,1835.5604507,1813.8470724,1791.9895239,1769.9894206,1747.8483931,1725.5680867,1703.1501618,1680.5962932,1657.9081707,1635.0874985,1612.1359952,1589.0553936,1565.8474409,1542.5138984,1519.0565410,1495.4771578,1471.7775513,1447.9595378,1424.0249466,1399.9756206,1375.8134157,1351.5402005,1327.1578567,1302.6682785,1278.0733724,1253.3750574,1228.5752643,1203.6759360,1178.6790272,1153.5865040,1128.4003439,1103.1225355,1077.7550785,1052.2999830,1026.7592702,1001.1349711,975.42912705,949.64378940,923.78101904,897.84288636,871.83147097,845.74886152,819.59715539,793.37845851,767.09488512,740.74855748,714.34160569,687.87616739,661.35438752,634.77841811,608.15041795,581.47255240,554.74699308,527.97591765,501.16150951,474.30595754,447.41145586,420.48020351,393.51440422,366.51626611,339.48800143,312.43182627,285.34996030,258.24462644,231.11805066,203.97246162,176.81009042,149.63317034,122.44393648,95.244625564,68.037475592,40.824725575,13.608615243

Die Werte sind in Quadratkilometern angegeben.


Wenn Sie diese Bereiche approximieren oder ihr Verhalten einfach besser verstehen möchten, reduziert sich die Formel auf eine Potenzreihe nach diesem Muster:

area(f) = 2 * pi * b^2 * z * (1 + (4/3)y + (6/5)y^2 + (8/7)y^3 + ...)

wo

z = sin(f), y = (e*z)^2.

(Eine äquivalente Formel erscheint in Bugayevskiy & Snyder, op. Cit. , Die Gleichung (2.1).)

Da e ^ 2 so klein ist (ungefähr 1/150 für alle Ellipsoidmodelle der Erde) und z zwischen 0 und 1 liegt, ist auch y klein. Somit werden die Terme y ^ 2, y ^ 3, ... schnell kleiner und fügen mit jedem Term mehr als zwei Dezimalstellen hinzu. Wenn wir y insgesamt ignorieren würden, wäre die Formel die der Fläche einer Kugel mit dem Radius b . Die übrigen Begriffe können so verstanden werden, dass sie die äquatoriale Ausbuchtung der Erde korrigieren.


Bearbeiten

Es wurden einige Fragen aufgeworfen, wie eine geodätische Entfernungsberechnung der Fläche mit diesen genauen Formeln verglichen werden kann. Die geodätische Distanzmethode approximiert jedes Viereck durch die Geodäten und nicht durch Parallelen, die seine Ecken horizontal verbinden, und wendet die euklidische Formel für ein Trapez an. Bei kleinen Vierecken wie 30'-Quads ist diese geringfügig vorgespannt und weist eine relative Genauigkeit zwischen 6 und 10 ppm auf. Hier ist eine grafische Darstellung des Fehlers für WGS 84 (oder ein vernünftiges Erdellipsoid):

Figur 2

Wenn Sie also (1) einfachen Zugriff auf geodätische Entfernungsberechnungen haben und (2) Fehler auf ppm-Ebene tolerieren können, können Sie diese geodätischen Berechnungen verwenden und ihre Ergebnisse mit 1,00000791 multiplizieren, um die Abweichung zu korrigieren. Subtrahieren Sie für zwei weitere Dezimalstellen pi / 2 * cos (2f) / 10 ^ 6 vom Korrekturfaktor: Das Ergebnis ist auf 0,04 ppm genau.

whuber
quelle
1
Wenn Ihr System eine atanh-Funktion bietet, können Sie etwas genauere Ergebnisse (weniger Abrundung) erzielen, indem Sie log (zp / zm) durch 2 * atanh (e * sin (f)) ersetzen.
cffk
@cffk Das ist ein guter Punkt. Ich habe die Formeln ursprünglich in Bezug auf atanh erhalten, sie jedoch in Logarithmen konvertiert, in der Erwartung, dass (a) die meisten GIS-Benutzer mit dieser Funktion nicht vertraut sind und (b) viele Benutzer keinen Zugriff auf Systeme haben, in denen sie bereitgestellt werden. Obwohl der Verlust an Präzision ein potenzielles Problem darstellt, zeigt eine schnelle Überprüfung der Größe der Exzentrizität, dass bei der Arbeit mit Erdellipsoiden wenig verloren geht - möglicherweise etwas mehr als zwei Dezimalstellen. Ich habe die Power-Serie teilweise bereitgestellt, damit die Leser auf Wunsch die größtmögliche Präzision erzielen können.
whuber
3

Die Antwort auf Radouxjus Frage hängt von der Form des Pixels ab, wenn es auf das Ellipsoid projiziert wird. Wenn das Koordinatensystem des Rasters Längen- und Breitengrad ist, ist das Pixel ein Rechteck einer Loxodrome, und die Antwort von whuber kann verwendet werden, oder allgemeiner können Sie die Formel für ein Polygon verwenden, dessen Kanten Loxodrome sind. Wenn das Koordinatensystem eine konforme Projektion in großem Maßstab (UTM, Zustandsebene usw.) ist, ist es genauer, die Kanten durch Geodäten zu approximieren und die Formel für ein geodätisches Polygon zu verwenden. Geodätische Polygone eignen sich wahrscheinlich am besten für den allgemeinen Gebrauch, da sie sich im Gegensatz zu Rhumb-Line-Polygonen in der Nähe der Pole "gut benehmen".

Implementierungen der Formeln für geodätische und Rhumb-Line-Polygone werden von meiner Bibliothek GeographicLib bereitgestellt . Das geodätische Gebiet ist in mehreren Sprachen verfügbar. Der Rhumb-Line-Bereich ist nur C ++. Es gibt eine Online - Version (geodätische + Loxodrome) verfügbar hier . Die Genauigkeit dieser Berechnungen ist typischerweise besser als 0,1 Quadratmeter.

Sie müssen nach glaubwürdigen / offiziellen ... Die geodätischen Formeln werden in den geodätischen Bereichen (Danielsen, 1989, Abonnement erforderlich) und den Algorithmen für Geodäten (Karney, 2013, Open Access) abgeleitet. Die Rhumbuslinienformeln sind hier angegeben .

cffk
quelle
(+1) Ich stimme diesem Beitrag für die darin enthaltenen nützlichen Informationen zu, obwohl er die Frage (oder das Kopfgeld) nicht wirklich anspricht. Beide befassen sich speziell mit Rastern in geografischen Koordinatensystemen.
whuber
1

Ich bin auf diese Frage gestoßen, als ich versucht habe, eine Formel für die Fläche eines WGS84-Pixels zu bestimmen. Während die Antwort von @ whuber diese Informationen enthält, war es noch einige Arbeit, eine Formel für die Fläche eines Quadrats mit quadratischem Grad bei einem bestimmten Breitengrad zu erhalten. Ich habe eine Python-Funktion eingefügt, die ich unten geschrieben habe und die dies in einem einzigen Aufruf zusammenfasst. Obwohl es die Frage des Posters nach dem Bereich eines GESAMTEN Rasters nicht direkt beantwortet (obwohl man die Bereiche aller Pixel summieren könnte), denke ich, dass es immer noch nützliche Informationen für jemanden sind, der nach einer ähnlichen Berechnung sucht.

def area_of_pixel(pixel_size, center_lat):
    """Calculate m^2 area of a wgs84 square pixel.

    Adapted from: /gis//a/127327/2397

    Parameters:
        pixel_size (float): length of side of pixel in degrees.
        center_lat (float): latitude of the center of the pixel. Note this
            value +/- half the `pixel-size` must not exceed 90/-90 degrees
            latitude or an invalid area will be calculated.

    Returns:
        Area of square pixel of side length `pixel_size` centered at
        `center_lat` in m^2.

    """
    a = 6378137  # meters
    b = 6356752.3142  # meters
    e = math.sqrt(1 - (b/a)**2)
    area_list = []
    for f in [center_lat+pixel_size/2, center_lat-pixel_size/2]:
        zm = 1 - e*math.sin(math.radians(f))
        zp = 1 + e*math.sin(math.radians(f))
        area_list.append(
            math.pi * b**2 * (
                math.log(zp/zm) / (2*e) +
                math.sin(math.radians(f)) / (zp*zm)))
    return pixel_size / 360. * (area_list[0] - area_list[1])
Reich
quelle