[GIS] Converting local Coordinates to lat/long Coordinates using QGIS

convertcoordinate systemlatitude longitudeqgis

I'm using QGIS to do some data analysis and visualization for my newspaper and I'm a basic/novice user at all this.

I received some x,y coordinates from the City of Minneapolis that I can use to build some static graphical maps shaped like Minneapolis, because QGIS nicely plops the markers on my Minneapolis street centerline shapefile. They're using a county-level coordinate reference system that's not in the EPSG dataset.

But where it gets tricky is attempting to stick those coordinates on a basemap using Leaflet or similar solutions. Those interactive mapping tools seem to need latitude/longitude coordinates and choke on the projected coordinates.

So I've attempted to convert the coordinates to lat/longs. Here's a sample of what Minneapolis sent me in CSV format:

itm,utm

531044.956020000000000,147730.870020000000000
531044.956020000000000,147730.870020000000000
535730.695380000000000,186474.417610000000000
535730.695380000000000,186474.417610000000000
535730.695380000000000,186474.417610000000000
517443.467270000000000,190435.841829999000000

Pretty much every converter I've used — including QSIG tools like the field calculator, export/add geometry columns, mmqgis, etc — converts them and sticks the markers in a Minneapolis-shape in the Pacific Ocean off South America and spits this out in the attribute table:

itm,utm,XCOORD,YCOORD

531044.956020000000000,147730.870020000000000,-92.720933,1.336549
531044.956020000000000,147730.870020000000000,-92.720933,1.336549
535730.695380000000000,186474.417610000000000,-92.678761,1.687061
535730.695380000000000,186474.417610000000000,-92.678761,1.687061
535730.695380000000000,186474.417610000000000,-92.678761,1.687061
517443.467270000000000,190435.841829999000000,-92.843170,1.722921

Here are the details Minneapolis sent me about their Coordinate System (they don't have a converter either, I'm told):

The Spatial Reference ID # is Esri::103734.   

Projection: Lambert_Conformal_Conic

False_Easting: 500000.000000 
False_Northing: 100000.000000
Central_Meridian: -93.383333 
Standard_Parallel_1: 44.883333
Standard_Parallel_2: 45.133333 
Latitude_Of_Origin: 44.791111

Linear Unit: Foot_US (0.304801) 

Geographic Coordinate System:
GCS_NAD_1983_HARN_Adj_MN_Hennepin 
Angular Unit: Degree (0.017453292519943299) 
Prime Meridian: Greenwich (0.0) 
Datum: D_NAD_1983_HARN_Adj_MN_Hennepin
Spheroid: S_GRS_1980_Adj_MN_Hennepin 
Semimajor Axis: 6378418.9409999996
Semiminor Axis: 6357033.3098455509
Inverse Flattening: 298.2572221008827

The equivalent ProjCRS well-known text is:

PROJCS["NAD_1983_HARN_Adj_MN_Hennepin_Feet",GEOGCS["GCS_NAD_1983_HARN_Adj_MN_Hennepin",DATUM["D_NAD_1983_HARN_Adj_MN_Hennepin",SPHEROID["S_GRS_1980_Adj_MN_Hennepin",6378418.941,298.2572221008827]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",100000.0],PARAMETER["Central_Meridian",-93.38333333333334],PARAMETER["Standard_Parallel_1",44.88333333333333],PARAMETER["Standard_Parallel_2",45.13333333333333],PARAMETER["Latitude_Of_Origin",44.79111111111111],UNIT["Foot_US",0.3048006096012192],AUTHORITY["Esri",103734]]

and the GeoCRS WKT is:

GEOGCS["GCS_NAD_1983_HARN_Adj_MN_Hennepin",DATUM["D_NAD_1983_HARN_Adj_MN_Hennepin",SPHEROID["S_GRS_1980_Adj_MN_Hennepin",6378418.941,298.2572221008827]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]

QGIS reads the coordinates using NAD83(CSRS) / UTM zone 15N (though whenever I look at a UTM grid, it seems to place Minnesota in 15T)?

I'm looking for a long term solution to work with the coordinate system, since we're likely to receive more data like this from the city and Hennepin County.

Best Answer

You have to build the proj.4 string for the CRS from the parameters given:

+proj=lcc +lat_1=44.883333 +lat_2=45.133333 +lat_0=44.791111 +lon_0=-93.383333 +x_0=152400.000000 +y_0=30480.000000 +a=6378418.9409999996 +b=6357033.3098455509 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs

Note that x_0 and y_0 have to be in meters, while false Easting and Northing from the definition (and the WKT mkennedy added) are in units of the projection (us-ft).

With that, you can load the data as delimited text, with X set to the itm column and Y to the utm column. If you have not set QGIS to prompt for the CRS, rightclick on the layer -> Set CRS for layer

to get the right alignment:

enter image description here

I'm not sure why they have named the second column utm, the projection has nothing to do with Universal Tramnsverse Mercator.

Related Question