# Geopositional Deltas Expressed As Meters

## Aug 10, 2017 20:44 · 319 words · 2 minutes read

# Algorithm to achieve 1m of displacement as Degrees of Latitude and Longitude

### North/South Deltas:

This conversion is static no matter where you are on earth

=>
`1Lat = 110.574km`

`1Lat = 110574m`

`1m = 0.00000904371732957115 Lat`

therefore a delta can be calculated by the following algorithm:

```
const METERS_TO_LATITUDE = 0.00000904371732957115
const latitudeDelta = meters => meters * METERS_TO_LATITUDE
```

### East/West Deltas

This is not as straight forward. Degrees of Longitude (Lon) have to be calculated based on positioning on Earth. For example: 1Lon at the earth’s equator is much further a distance than 1Lon at either of the poles. This means we have to take into account the Latitude position to calculate 1Lon

The shortened algorithm looks like:
`1Lon = 111.320km * cos(Lat)`

First, we’ll convert it to meters:

`1Lon = 111320m * cos(Lat)`

Latitude is expressed in degrees, however we’ll need to convert it first to radians.

The standard algorithm to convert to radians is:

`radians = degrees * π/180`

which gives us:

`1Lon = 111320m * cos(Lat*π/180)`

However, we need to solve for meters:

`111320m = cos(Lat * π/180)`

`1m = cos(Lat * π/180) / 111320`

Which means, the following should be the correct algorithm:

```
const {PI, cos} = Math
// degrees to radians
const d2r = d => d * PI / 180
const longitudeDelta = (meters, lat) => meters * (cos(d2r(lat)) / 11320)
```

If this is true, we can also create some extra helper methods:

```
// all functions return a [LonLat] pair... keeping with the mathematical
// convention of supplying the `x` value first
const calculateDeltas = ( [ dx, dy ], lat) => (
[ longitudeDelta(dx, lat), latitudeDelta(dy) ]
)
const translateGeoPoint = ([ lon, lat ], [ dx, dy ]) => {
const deltas = calculateDeltas(lat, [ dx, dy ])
return [ lon + deltas[0], lat + deltas[1] ]
}
```

I believe this is correct… if not, I’ll update this doc with further findings.