# Should I use different projections to calculate distance and displaying on the Map?

I'm using the UK crime dataset provided by https://data.police.uk/

My question is about coordinate systems/map projections. The crime locations are stored with the projection EPSG 4326 which uses degrees as units. But to do some distance calculations, I would like to use meters.

From what I could research there are many projections and depending on the use-case, some are better than others. In this case, I encountered the British National Grid(EPSG: 27700) which gives accurate distances as long as it’s within the United Kingdom. In PostGIS, I can transform geometries that are EPSG 4326 to 27700 using ST_Transform(https://postgis.net/docs/ST_Transform.html ) and calculate that way. However if I want to display in a Web Map, which usually uses EPSG:3857 to display the map, I need to convert the output of the query to EPSG:3857?

In a nutshell, convert from 4326 to 27700 to do calculations, then convert the output to 3857 to display on the map. Do you think this procedure makes sense? If not, can you explain what I should know/do to tackle this problem?

Based on this assumption I would do something like this:

``````-- get all streets within a radius of 100 meters
-- where the center is a crime point with ID=1

SELECT street_id, ST_Transform(street_geom, 3857)
FROM streets
INNER JOIN crimes_street as cst
ON ST_DWithin(ST_Transform(street_geom, 27700), ST_Transform(cst.longlat_point, 27700), 100)
WHERE cst.crime_street_id = 1
``````
• why not use 27700 through out? Apr 30 at 8:27
• Stick with 4326, cast to `GEOGRAPHY` to calculate distances and, if needed, transform to 3857 - some web map client libraries expect data in 4326, too, and transform internally. Apr 30 at 9:24
• @IanTurton I'm new to GIS, so what I say might not make sense. I thought that storing in 4326 would be beneficial because it's a "universal projection". Not restricted by any location unlike 27700. If I store them in 27700 they would only be usable with a map that uses 27700 projection. Apr 30 at 13:32
• @geozelot Ah I see. Because in most functions geography types seem to use meters. For example, ST_DWithing uses meters for `GEOGRAPHY` arguments, so it's only necessary to convert the `GEOMETRY` to `GEOGRAPHY` and the distances would be calculated correctly I assume. If the case of a function not accepting a `GEOGRAPHY` type, what should be done? Apr 30 at 13:39
• Use the 27700 to calculate your distances to a field in your dataset and make a note of that on any map. You can reproject your data after that to any other coordinate system, also making a note of that. But if you are using QGIS or ArcGIS they will handle the transformation between coordinate systems on the fly (automatically) so you don't need to make different coordinate system versions.
– John
Apr 30 at 14:23

``````...the output of the query...
Use the `ST_Transform` to do the calculation, as you would like.