WOLFRAM

Enable JavaScript to interact with content and submit forms on Wolfram websites. Learn how
Wolfram Language & System Documentation Center

GeoGridUnitDistance [proj,loc,α]

gives the actual geo distance corresponding to a unit distance on the geo grid obtained with projection proj, evaluated in the limit of small displacement from location loc in direction α.

Details and Options
Details and Options Details and Options
Examples  
Basic Examples  
Scope  
Options  
GeoModel  
UnitSystem  
Properties & Relations  
Possible Issues  
Neat Examples  
See Also
Tech Notes
Related Guides
History
Cite this Page

GeoGridUnitDistance [proj,loc,α]

gives the actual geo distance corresponding to a unit distance on the geo grid obtained with projection proj, evaluated in the limit of small displacement from location loc in direction α.

Details and Options

  • GeoGridUnitDistance describes the local distortion of distance induced by a geo projection around a given location.
  • The inverse of geo grid unit distance is also known as point scale or particular scale.
  • GeoGridUnitDistance 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 scale induced by the geo projection.
  • The result of GeoGridUnitDistance [] corresponds to a ratio of Quantity geo distances on the geo model (of Earth or any other body) and dimensionless distances of the projected geo grid.
  • Points of maps including large regions ("large-scale maps") correspond to large values of geo distance scale, and points of "small-scale maps" correspond to small values of geo distance scale.
  • If geo grid unit distance is independent of azimuth at a point, then it is said to be isotropic at that point. A geo projection is conformal if and only if geo grid unit distance is isotropic at all points, though its value may still vary from point to point.
  • 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 GeoProjectionData and params are parameter rules like "StandardParallels"->{33,60}. 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 GeoPosition [] or GeoGridPosition [] or as a geo entity Entity [].
  • The bearing or azimuthal direction α is an angle measured clockwise from true north. It can be given as a Quantity angle, as a number in degrees or as a named compass direction like "North", "NE" or "NEbE".
  • GeoGridUnitDistance threads over its location and direction arguments.
  • Possible options of GeoGridUnitDistance include:
  • GeoModel Automatic model of Earth or a celestial body
    UnitSystem $UnitSystem unit system to use in the result

Examples

open all close all

Basic Examples  (2)

Compute the unit geo distance induced by the Mercator projection at Copenhagen in the northeast direction:

Wolfram Language code: scale = GeoGridUnitDistance["Mercator", Entity["City", {"Copenhagen", "Copenhagen", "Denmark"}], "NE"]

Compute the final position of a geodesic of that length starting from Copenhagen in the northeast direction:

Wolfram Language code: GeoDestination[Entity["City", {"Copenhagen", "Copenhagen", "Denmark"}], {scale, 45}]

Compare the geo path joining those locations with the map units and the scale bar:

Wolfram Language code: GeoGraphics[{Blue, Thick, GeoPath[{Entity["City", {"Copenhagen", "Copenhagen", "Denmark"}], %}]}, GeoProjection -> "Mercator", GeoScaleBar -> $UnitSystem, GeoRangePadding -> Quantity[30, "Kilometers"], Frame -> True]

If map units are made to correspond to inches, the traditional scale notation is 1:2468243, as given by the following:

Wolfram Language code: DecimalForm[scale / Quantity[1, "Inches"]]

Use the Mollweide projection to construct a flat map based on a reference sphere of radius 6371:

Wolfram Language code: proj = {"Mollweide", "ReferenceModel" -> 6371, "Centering" -> {0, 0}}

Then a unit of projected distance at London corresponds to a geo distance between these two values:

Wolfram Language code: GeoGridUnitDistance[proj, Entity["City", {"Paris", "IleDeFrance", "France"}], MinMax]
Wolfram Language code: GeoGraphics[Entity["City", {"Paris", "IleDeFrance", "France"}], GeoProjection -> proj, GeoRange -> Max[%], GeoScaleBar -> $UnitSystem, Frame -> True]

Scope  (9)

Compute the geo grid unit distance for a geo projection at your current geo location in the northward direction:

Wolfram Language code: GeoGridUnitDistance["Mollweide", Here, 0]

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

Wolfram Language code: GeoProjectionData["Mollweide"]

Specify other values for the parameters of the projection:

Wolfram Language code: GeoGridUnitDistance[{"Mollweide", "ReferenceModel" -> 1000}, Here, 0]
Wolfram Language code: GeoGridUnitDistance[{"Mollweide", "Centering" -> {-40, 150}}, Here, 0]

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

Wolfram Language code: GeoGridUnitDistance["Mercator", {-80.5, 30.32}, 60]

Use locations with geo position heads:

Wolfram Language code: GeoGridUnitDistance["Mercator", GeoPosition[{-80.5, 30.32}], 60]
Wolfram Language code: GeoGridUnitDistance["Mercator", GeoPositionXYZ[{911681, 533170, -6268998}], 60]
Wolfram Language code: GeoGridUnitDistance["Mercator", GeoGridPosition[{0.714285, -0.753047}, "Albers"], 60]

Specify a location using a geo Entity object:

Wolfram Language code: GeoGridUnitDistance["Albers", Entity["City", {"Toronto", "Ontario", "Canada"}], -30]

Compute the geo distance scale for a list of locations, all along the same direction:

Wolfram Language code: GeoGridUnitDistance["Mollweide", {GeoPosition[{10, 40}], GeoGridPosition[{-30.3, 20}, "Mercator"], {85, 178}}, 35]

Convert the QuantityArray output into its normal form:

Wolfram Language code: %//Normal

Specify the azimuth as a number of degrees:

Wolfram Language code: GeoGridUnitDistance["Equirectangular", {80, -40}, 95]

Specify the same azimuth as a Quantity angle:

Wolfram Language code: GeoGridUnitDistance["Equirectangular", {80, -40}, Quantity[95, "AngularDegrees"]]

Use any other angular unit:

Wolfram Language code: GeoGridUnitDistance["Equirectangular", {80, -40}, Quantity[1, "Radians"]]

Compute the geo grid unit distance for a list of different azimuths at the same location:

Wolfram Language code: GeoGridUnitDistance["Equirectangular", {80, -40}, Range[0, 90, 15]]//Normal

The input can also be given as a QuantityArray object:

Wolfram Language code: % == GeoGridUnitDistance["Equirectangular", {80, 40}, QuantityArray[Range[0, 90, 15], "AngularDegrees"]]

Compute the range of possible values of geo grid unit distance at a given location:

Wolfram Language code: GeoGridUnitDistance["UrmayevI", Entity["City", {"Moscow", "Moscow", "Russia"}], MinMax]

Compare with the MinMax of values for each integer degree azimuth:

Wolfram Language code: MinMax@GeoGridUnitDistance["UrmayevI", Entity["City", {"Moscow", "Moscow", "Russia"}], Range[-180, 180]]

GeoGridUnitDistance can efficiently process values for large numbers of locations:

Wolfram Language code: locs = RandomGeoPosition["World", 10 ^ 6];
Wolfram Language code: azims = RandomReal[{-180, 180}, 10 ^ 6];
Wolfram Language code: GeoGridUnitDistance["Mollweide", locs, azims]//AbsoluteTiming

Select the same reference model and geo model to eliminate the effect of nominal scale:

Wolfram Language code: scale[proj_, loc_, α_] := QuantityMagnitude[GeoGridUnitDistance[{proj, "ReferenceModel" -> 1}, loc, α, GeoModel -> 1], "Meters"]

The inverses of geo grid unit distance along meridians and parallels are traditionally denoted as h and k:

Wolfram Language code: h[proj_, loc_] := 1 / scale[proj, loc, 0]; k[proj_, loc_] := 1 / scale[proj, loc, 90];

The behavior for these cylindrical projections is identical along parallels, but different along meridians:

Wolfram Language code: Plot[{k["Mercator", {lat, 0}], k["Equirectangular", {lat, 0}], k["CylindricalEqualArea", {lat, 0}]}, {lat, 0, 90}, PlotLegends -> {"Mercator", "Equirectangular", "CylindricalEqualArea"}]
Wolfram Language code: Plot[{h["Mercator", {lat, 0}], h["Equirectangular", {lat, 0}], h["CylindricalEqualArea", {lat, 0}]}, {lat, 0, 90}, PlotLegends -> {"Mercator", "Equirectangular", "CylindricalEqualArea"}]

Options  (2)

GeoModel  (1)

By default, GeoGridUnitDistance returns values for Earth:

Wolfram Language code: GeoGridUnitDistance["Bonne", {50, -100}, 90]

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

Wolfram Language code: GeoGridUnitDistance["Bonne", {50, -100}, 90, GeoModel -> "Moon"]

Choose a spherical model of specific radius:

Wolfram Language code: GeoGridUnitDistance["Bonne", {50, -100}, 90, GeoModel -> Quantity[2000, "Kilometers"]]

UnitSystem  (1)

Select the unit system used to return the distance scale:

Wolfram Language code: GeoGridUnitDistance["Wiechel", GeoPosition[{10, 120}], 20, UnitSystem -> "Metric"]
Wolfram Language code: GeoGridUnitDistance["Wiechel", GeoPosition[{10, 120}], 20, UnitSystem -> "Imperial"]

They are the same value, but in different units:

Wolfram Language code: % == %%

Properties & Relations  (11)

Take the Mercator projection on the default ellipsoidal model of Earth, a location and a direction:

Wolfram Language code: proj = {"Mercator", "ReferenceModel" -> "ITRF00"}; p = GeoPosition[{89, 0}]; α = 50;

Geo grid unit distance at p in direction α is the limit of the quotient of true and projected distances between p and a nearby point in direction α:

Wolfram Language code: projectedDistance[p_, q_, proj_] := EuclideanDistance[GeoGridPosition[p, proj]["GridXY"], GeoGridPosition[q, proj]["GridXY"]]
Wolfram Language code: Table[dist / projectedDistance[p, GeoDestination[p, {dist, α}], proj], {dist, Quantity[PowerRange[10 ^ 5, 0.01, 0.1], "Meters"]}]
Wolfram Language code: ListPlot[%, Joined -> True, PlotMarkers -> Automatic, Ticks -> {None, Automatic}]

Compare with the computed value:

Wolfram Language code: GeoGridUnitDistance[proj, p, α, GeoModel -> "ITRF00", UnitSystem -> "Metric"]

GeoGridUnitDistance is periodic in azimuth with a period of 180 degrees:

Wolfram Language code: proj = {"Bonne", "Centering" -> {40, 0}}; p = GeoPosition[{80, 40}];
Wolfram Language code: F[θ_Real] := QuantityMagnitude[GeoGridUnitDistance[proj, p, θ], "Meters"]
Wolfram Language code: Plot[F[θ], {θ, -180, 360}]

Find the positions of one minimum and one maximum:

Wolfram Language code: {FindMinimum[F[θ], θ], FindMaximum[F[θ], θ]}//Quiet
Wolfram Language code: {mindir, maxdir} = θ /. %[[All, 2]]

Those correspond to the semiaxes of this Tissot ellipse:

Wolfram Language code: GeoGraphics[{GeoCircle[p, 1000], Red, Arrow@GeoPath[{p, 1000, mindir}], Blue, Arrow@GeoPath[{p, 1000, maxdir}]}, GeoProjection -> proj]

Geo distance scale can vary strongly with azimuth at a given point:

Wolfram Language code: proj = "Equirectangular"; p = Entity["Country", "Svalbard"]["CapitalCity"]
Wolfram Language code: Plot[GeoGridUnitDistance[proj, p, θ], {θ, 0, 360}]

These are the minimum and maximum values attained:

Wolfram Language code: GeoGridUnitDistance[proj, p, MinMax]

Geo grid unit distance can vary strongly from point to point for the same projection and azimuth:

Wolfram Language code: locs = RandomGeoPosition["World", 10000]
Wolfram Language code: GeoGridUnitDistance["LambertAzimuthal", locs, 20]

The result varies by more than two orders of magnitude:

Wolfram Language code: MinMax[%]
Wolfram Language code: Histogram[%%]

Geo distance scale is proportional to the geo model parameter:

Wolfram Language code: GeoGridUnitDistance["Albers", GeoPosition[{80, 30}], 30, GeoModel -> #]& /@ Quantity[{1, 10, 100, 1000, 10000}, "Kilometers"]

Geo grid unit distance is inversely proportional to the reference model and central scale parameters:

Wolfram Language code: GeoGridUnitDistance[{"Albers", "ReferenceModel" -> #}, GeoPosition[{80, 30}], 30]& /@ {1, 10, 100, 1000, 10000}
Wolfram Language code: GeoGridUnitDistance[{"Albers", "CentralScaleFactor" -> #}, GeoPosition[{80, 30}], 30]& /@ {1, 10, 100, 1000, 10000}

For an ellipsoidal projection, geo grid unit distance depends only slightly on the choice of datum or ellipsoid:

Wolfram Language code: GeoGridUnitDistance[{"Mercator", "ReferenceModel" -> #}, GeoPosition[{80, 30}], 30, GeoModel -> #]& /@ GeodesyData[]//MinMax

Equidistant projections have constant geo grid unit distance along special paths on the map:

Wolfram Language code: projs = GeoProjectionData["Equidistant"]

For conic and cylindrical projections, this usually happens along meridians, at any location:

Wolfram Language code: points = RandomGeoPosition["World", 100]
Wolfram Language code: Table[GeoGridUnitDistance[{proj, "ReferenceModel" -> 1}, points, 0]//MinMax, {proj, {"ConicEquidistant", "CylindricalEquidistant", "Equirectangular", "GallIsographic"}}]

For the azimuthal equidistant projection, this happens for all directions from its centering:

Wolfram Language code: GeoGridUnitDistance[{"AzimuthalEquidistant", "Centering" -> Here}, Here, RandomReal[{-180, 180}, 100]]//MinMax

For short distances, GeoDistance can be approximated as a product of projected distance by geo grid unit distance:

Wolfram Language code: p = GeoPosition[{15., 20.}]; q = GeoPosition[{15.05, 20.01}];
Wolfram Language code: d = GeoDistance[p, q]

Compute projected distance in a given projection:

Wolfram Language code: proj = "Albers";
Wolfram Language code: EuclideanDistance[GeoGridPosition[p, proj]["GridXY"], GeoGridPosition[q, proj]["GridXY"]]

Multiply by geo grid unit distance in the direction from p to q:

Wolfram Language code: %GeoGridUnitDistance[proj, p, GeoDirection[p, q]]

The difference with the true result is smaller than 1%:

Wolfram Language code: % / d

Compute geo distance along a meridian using any projection:

Wolfram Language code: p = GeoPosition[{15., 120.}]; q = GeoPosition[{88., 120.}];
Wolfram Language code: GeoGraphics[{Red, Thick, GeoPath[{p, q}]}, GeoProjection -> "VanDerGrintenII", Frame -> True, GeoGridLines -> Quantity[10, "AngularDegrees"], GeoRangePadding -> Quantity[15, "AngularDegrees"]]

Extract the projection selected by GeoGraphics and compute the projected points:

Wolfram Language code: proj = GeoProjection /. Options[%, GeoProjection]
Wolfram Language code: gridp = GeoGridPosition[p, proj];gridq = GeoGridPosition[q, proj];

Here is the geo grid unit distance along the meridian, as a function of the projected y coordinate:

Wolfram Language code: f[y_Real] := GeoGridUnitDistance[proj, GeoGridPosition[{0, y}, proj], 0, GeoModel -> "ITRF00"]

Compute the distance through a numerical integration:

Wolfram Language code: NIntegrate[f[y], {y, gridp["GridY"], gridq["GridY"]}]

Compare with the unprojected geo distance:

Wolfram Language code: % - GeoDistance[{p, q}]

Compare intervals of geo grid unit distance for different projections at the same point:

Wolfram Language code: projs = {"EckertGreifendorff", "Bonne", "Albers", "Mollweide", "Equirectangular"};
Wolfram Language code: p = GeoPosition[{15, 20}];
Wolfram Language code: NumberLinePlot[QuantityMagnitude[GeoGridUnitDistance[{#, "ReferenceModel" -> 1}, p, Interval], "Kilometers"]& /@ projs, PlotLegends -> projs]

The geo grid unit distance in conformal projections, like Mercator, is isotropic (does not depend on azimuth):

Wolfram Language code: sphconformal = { "AugustEpicycloidal", "EquatorialStereographic", "HerschelConicConformal", "Lagrange", "LambertConicConformal", "Littrow", "Mercator", "ObliqueMercator", "PeirceQuincuncial", "Stereographic", "TransverseMercator"};
Wolfram Language code: GeoProjectionData[#, "Conformal"]& /@ sphconformal
Wolfram Language code: GeoGridUnitDistance[#, GeoPosition[Entity["City", {"NewYork", "NewYork", "UnitedStates"}]], MinMax]& /@ sphconformal

The actual value of the projected unit distance varies from point to point for any given projection:

Wolfram Language code: GeoGridUnitDistance["Mercator", {80, 0}, MinMax]
Wolfram Language code: GeoGridUnitDistance["Mercator", {40, 50}, MinMax]
Wolfram Language code: GeoGridUnitDistance["Mercator", {70, -150}, MinMax]

Both isotropy and the dependence on latitude are clear in a map showing Tissot indicatrices:

Wolfram Language code: GeoGraphics[Table[GeoDisk[{lat, lon}, Quantity[300, "Miles"]], {lat, -80, 80, 20}, {lon, -150, 150, 30}], GeoProjection -> "Mercator"]

Possible Issues  (1)

If a geo location cannot be projected, then the geo grid unit distance cannot be computed either:

Wolfram Language code: GeoGridPosition[GeoPosition[{20, 120}], "Orthographic"]
Wolfram Language code: GeoGridUnitDistance["Orthographic", GeoPosition[{20, 120}], 90]

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

Wolfram Language code: GeoGraphics[GeoRange -> "World", GeoProjection -> "Orthographic", GeoGridLines -> Automatic]

Neat Examples  (1)

Compare the geo grid unit distance in the Mercator projection at different latitudes:

Wolfram Language code: ratio[lat_] := QuantityMagnitude[GeoGridUnitDistance["Mercator", {lat, 0}, 90, GeoModel -> 180 / Pi], "Meters"];
Wolfram Language code: p[lat_, lon_] := {ratio[lat]lon, lat};
Wolfram Language code: points = Table[p[lat, lon], {lat, 0, 88, 11}, {lon, -180, 180, 30}];

The following diagram shows at the bottom a scale at lower latitudes and how it changes when it is projected at higher latitudes:

Wolfram Language code: Graphics[{Point[Flatten[points, 1]], Line /@ points, Thickness[.002], Red, Line /@ Transpose[points]}, Frame -> True]

Sometimes this diagram is presented using the inverse ratio:

Wolfram Language code: ip[lat_, lon_] := {1 / ratio[lat]lon, lat};
Wolfram Language code: ipoints = Table[ip[lat, lon], {lat, 0, 77, 11}, {lon, -180, 180, 30}];
Wolfram Language code: Graphics[{Point[Flatten[ipoints, 1]], Line /@ ipoints, Thickness[.002], Red, Line /@ Transpose[ipoints]}, Frame -> True, AspectRatio -> 1 / 5]

Tech Notes

Wolfram Research (2019), GeoGridUnitDistance, Wolfram Language function, https://reference.wolfram.com/language/ref/GeoGridUnitDistance.html.

Text

Wolfram Research (2019), GeoGridUnitDistance, Wolfram Language function, https://reference.wolfram.com/language/ref/GeoGridUnitDistance.html.

CMS

Wolfram Language. 2019. "GeoGridUnitDistance." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/GeoGridUnitDistance.html.

APA

Wolfram Language. (2019). GeoGridUnitDistance. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/GeoGridUnitDistance.html

BibTeX

@misc{reference.wolfram_2026_geogridunitdistance, author="Wolfram Research", title="{GeoGridUnitDistance}", year="2019", howpublished="\url{https://reference.wolfram.com/language/ref/GeoGridUnitDistance.html}", note=[Accessed: 14-August-2026]}

BibLaTeX

@online{reference.wolfram_2026_geogridunitdistance, organization={Wolfram Research}, title={GeoGridUnitDistance}, year={2019}, url={https://reference.wolfram.com/language/ref/GeoGridUnitDistance.html}, note=[Accessed: 14-August-2026]}

Top [フレーム]

AltStyle によって変換されたページ (->オリジナル) /