({{, (RefLink[GeoGridUnitArea, paclet:ref/GeoGridUnitArea])[proj,loc] 
gives the actual geo area corresponding to a unit area on the geo grid obtained with projection proj, evaluated in the limit of small geo regions around location loc.}})

OpenersNotesSection(Spacer1)Details and Options

(RefLink[GeoGridUnitArea, paclet:ref/GeoGridUnitArea]) combines the global nominal scale (the shrinking factor of the geo model to the reference model of the map, traditionally denoted as 1:125000 and similar) and the local distortion of area induced by the geo projection.

The result of (RefLink[GeoGridUnitArea, paclet:ref/GeoGridUnitArea])[…] corresponds to a ratio of (RefLink[Quantity, paclet:ref/Quantity]) geo areas on the geo model (of Earth or any other body) and dimensionless areas of the projected geo grid.

A geo projection can be given as a named projection "proj" with default parameters or as {"proj",params}, where "proj" is any of the entities of (RefLink[GeoProjectionData, paclet:ref/GeoProjectionData]) and params are parameter rules like "StandardParallels"->{33,60}. (RefLink[GeoProjectionData, paclet:ref/GeoProjectionData])["proj"] gives the default values of the parameters for the projection "proj".

The location loc can be given as a coordinate pair {lat,lon} in degrees, a geo position object like (RefLink[GeoPosition, paclet:ref/GeoPosition])[…] or (RefLink[GeoGridPosition, paclet:ref/GeoGridPosition])[…] or as a geo entity (RefLink[Entity, paclet:ref/Entity])[…].

(RefLink[GeoGridUnitArea, paclet:ref/GeoGridUnitArea]) threads over its location and direction arguments.

Possible options of (RefLink[GeoGridUnitArea, paclet:ref/GeoGridUnitArea]) include:

OpenersPrimaryExamplesSection(Spacer1)Examples  (15)

OpenersExampleSection0(Spacer1)Basic Examples  (1)

Compute the geo grid unit area induced by the Mercator projection at the location of the Eiffel Tower:

scale=GeoGridUnitArea["Mercator",(Entity["Eiffel Tower", Entity["Building","EiffelTower::5h9w8"], "Entity[\"Building\", \"EiffelTower::5h9w8\"]", "building"])]

A small square of side length 0.01 in projected coordinates has the following area:

0.01^2scale

Draw the square:

xy=GeoGridPosition[(Entity["Eiffel Tower", Entity["Building","EiffelTower::5h9w8"], "Entity[\"Building\", \"EiffelTower::5h9w8\"]", "building"]),"Mercator"]["GridXY"]

GeoGraphics[{Opacity[0.2],Rectangle[xy-{0.005,0.005},xy+{0.005,0.005}]},GeoProjection->"Mercator",Frame->True,PlotRangePadding->0.003]

OpenersExampleSection1(Spacer1)Scope  (5)

Compute the geo grid unit area at your geo location for the "VanDerGrinten" projection:

GeoGridUnitArea["VanDerGrinten",Here]

These are the default values of the parameters of the "VanDerGrinten" projection:

GeoProjectionData["VanDerGrinten"]

Specify other values for the parameters of the projection:

GeoGridUnitArea[{"VanDerGrinten","ReferenceModel"->1000},Here]

GeoGridUnitArea[{"VanDerGrinten","Centering"->{-40,150}},Here]

Specify a location using a pair {lat,lon} in degrees:

GeoGridUnitArea["Orthographic",{-80.5,30.32}]

Use locations with geo position heads:

GeoGridUnitArea["Orthographic",GeoPosition[{-80.5,30.32}]]

GeoGridUnitArea["Orthographic",GeoPositionXYZ[{911681,533170,-6268998}]]

GeoGridUnitArea["Orthographic",GeoGridPosition[{0.714285,-0.753047},"Albers"]]

Specify a location using a geo (RefLink[Entity, paclet:ref/Entity]) object:

GeoGridUnitArea["Albers",(Entity["Toronto", Entity["City",{"Toronto","Ontario","Canada"}], "Entity[\"City\", {\"Toronto\", \"Ontario\", \"Canada\"}]", "city"])]

Compute the geo grid unit area for a list of locations:

GeoGridUnitArea["Mollweide",{GeoPosition[{10,40}],GeoGridPosition[{-30.3,20},"Mercator"],{85,178}}]

Convert the (RefLink[QuantityArray, paclet:ref/QuantityArray]) output into its normal form:

%//Normal

(RefLink[GeoGridUnitArea, paclet:ref/GeoGridUnitArea]) can efficiently process values for large numbers of locations:

locs=RandomGeoPosition["World",10^6];

GeoGridUnitArea["Mollweide",locs]//AbsoluteTiming

OpenersExampleSection2(Spacer1)Options  (2)

OpenersExampleSubsection0(Spacer1)GeoModel  (1)

By default, (RefLink[GeoGridUnitArea, paclet:ref/GeoGridUnitArea]) returns values for Earth:

GeoGridUnitArea["Bonne",{50,-100}]

Performing the same computation on the corresponding point of the Moon returns smaller scales:

GeoGridUnitArea["Bonne",{50,-100},GeoModel->"Moon"]

Choose a spherical model of a specific radius:

GeoGridUnitArea["Bonne",{50,-100},GeoModel->Quantity[2000,"Kilometers"]]

OpenersExampleSubsection1(Spacer1)UnitSystem  (1)

Select the unit system used to return the distance scale:

GeoGridUnitArea["Wiechel",GeoPosition[{10,120}],UnitSystem->"Metric"]

GeoGridUnitArea["Wiechel",GeoPosition[{10,120}],UnitSystem->"Imperial"]

They are the same value, but in different units:

%==%

OpenersExampleSection3(Spacer1)Applications  (3)

For a cylindrical projection, the projected unit area only depends on latitude:

Plot3D[GeoGridUnitArea["Mercator",{lat,lon}],{lat,-89,89},{lon,-180,180}]

Use (RefLink[GeoGridUnitArea, paclet:ref/GeoGridUnitArea]) to approximate the geo area of a small region using the projected area in a map:

geopol=EntityValue[(Entity["Champaign", Entity["City",{"Champaign","Illinois","UnitedStates"}], "Entity[\"City\", {\"Champaign\", \"Illinois\", \"UnitedStates\"}]", "city"]),"Polygon"]

Project with the Albers projection and compute the flat map area:

pol=GeoGridPosition[geopol,"Albers"]

Area[pol/.GeoGridPosition[expr_,proj_]:>expr]

Multiply the result with the geo grid unit area at some central location of the region:

% GeoGridUnitArea["Albers",(Entity["Champaign", Entity["City",{"Champaign","Illinois","UnitedStates"}], "Entity[\"City\", {\"Champaign\", \"Illinois\", \"UnitedStates\"}]", "city"])]

Compare with the correct value of the geo area:

geopol//GeoArea

Compute the geo area of a region defined on the projected map:

GeoGraphics[{Opacity[0.5],Disk[{0,0},1]},GeoRange->"World",GeoProjection->"ConicEquidistant",Frame->True,Axes->True]

area[x_Real,y_Real]:=QuantityMagnitude[GeoGridUnitArea["ConicEquidistant",GeoGridPosition[{x,y},"ConicEquidistant"],GeoModel->"ITRF00"],"Kilometers"^2];

Quantity[NIntegrate[area[x,y],{x,y}∈Disk[{0,0},1]],"Kilometers"^2]

Compare with a computation based on a polygonal approximation of the disk:

GeoGridPosition[N@CirclePoints[10000],"ConicEquidistant"]

GeoArea[Polygon[GeoPosition[%]],UnitSystem->"Metric"]

OpenersExampleSection4(Spacer1)Properties & Relations  (3)

Take a location and a projection:

loc=(Entity["Lake Victoria", Entity["Lake","LakeVictoria::b8795"], "Entity[\"Lake\", \"LakeVictoria::b8795\"]", "lake"]);

proj="WagnerI";

Construct a family of projected squares of decreasing size, converging to that location:

{x,y}=GeoGridPosition[loc,proj]["GridXY"]

square[s_]:=Polygon[{{x-s,y+s},{x+s,y+s},{x+s,y-s},{x-s,y-s}}]

squares=square/@PowerRange[1,1/2000,1/2];

GeoGraphics[{EdgeForm[Black],FaceForm[],squares},GeoRange->"World",GeoProjection->proj,Frame->True]

Compute the ratios of an unprojected area over a projected area for those squares:

ratio[pol_]:=GeoArea[GeoPosition[GeoGridPosition[#,proj]&/@pol]]/Area[pol]

ratio/@squares

The values converge to the value given by (RefLink[GeoGridUnitArea, paclet:ref/GeoGridUnitArea]) for that projection at that location:

GeoGridUnitArea[proj,loc,GeoModel->"ITRF00"]

The projected unit area varies with the square of the geo model size:

proj=GeoProjectionData["Mollweide"]

GeoGridUnitArea["Mollweide",GeoPosition[{10,20}],GeoModel->#]&/@Quantity[{10,100,1000},"Kilometers"]

The projected unit area varies with the inverse square of the reference model or the central scale factor:

GeoGridUnitArea[{"Mollweide","ReferenceModel"->#},GeoPosition[{10,20}]]&/@{10,100,1000}

GeoGridUnitArea[{"Mollweide","CentralScaleFactor"->#},GeoPosition[{10,20}]]&/@{10,100,1000}

Equal-area projections have constant geo grid unit area over the globe:

equalarea=GeoProjectionData["EqualArea"]

For a random set of locations across the world, check that ranges of projected unit area have zero width:

points=RandomGeoPosition["World",1000];

MinMax/@QuantityMagnitude[GeoGridUnitArea[{#,"ReferenceModel"->1},points,GeoModel->Quantity[1,"Meters"]]&/@equalarea,"Meters"^2]

OpenersExampleSection5(Spacer1)Possible Issues  (1)

If a geo location cannot be projected, then the projected unit area cannot be computed for that location:

GeoGridPosition[GeoPosition[{20,120}],"Orthographic"]

GeoGridUnitArea["Orthographic",GeoPosition[{20,120}]]

This location is not on the half-Earth covered by the "Orthographic" projection with a default center:

GeoGraphics[GeoRange->"World",GeoProjection->"Orthographic",GeoGridLines->Automatic]

({{DocumentationFooterIconsRelatedFunction.png, ({{See Also}, {(RefLink[GeoArea, paclet:ref/GeoArea])  ▪  (RefLink[GeoGridUnitDistance, paclet:ref/GeoGridUnitDistance])  ▪  (RefLink[GeoGridDirectionDifference, paclet:ref/GeoGridDirectionDifference])  ▪  (RefLink[GeoProjectionData, paclet:ref/GeoProjectionData])}})}})

({{DocumentationFooterIconsRelatedGuide.png, ({{Related Guides}, {▪(RefLinkPlain[Geodesy, paclet:guide/Geodesy])}, {▪(RefLinkPlain[Maps & Cartography, paclet:guide/MapsAndCartography])}})}})