0
votes

How can I change the Coordinate Reference System (CRS) on Census Tract Data to match the Coordinate Reference System (CRS) on the UCLA Congressional District Shapefile?

I am working with the sf package and Census Tract data called Census_70.1. The data looks like the following:

Simple feature collection with 73669 features and 15 fields
geometry type:  MULTIPOLYGON
dimension:      XY
bbox:           xmin: -7115208 ymin: -1685018 xmax: 3321632 ymax: 4591848
epsg (SRID):    NA
proj4string:    +proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=37.5 +lon_0=-96 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs

geometry
1  MULTIPOLYGON (((777980.6 -6...
2  MULTIPOLYGON (((797299.6 -6...
3  MULTIPOLYGON (((781590.6 -7...
4  MULTIPOLYGON (((788040.7 -7...
5  MULTIPOLYGON (((782468.1 -7...
6  MULTIPOLYGON (((783828.9 -7...
7  MULTIPOLYGON (((776624.7 -7...
8  MULTIPOLYGON (((775274.6 -7...
9  MULTIPOLYGON (((791123.2 -7...
10 MULTIPOLYGON (((797096.8 -7...

I need to change the CRS to match the following congressional district shapefile:

Simple feature collection with 436 features and 19 fields (with 1 geometry empty)
geometry type:  MULTIPOLYGON
dimension:      XY
bbox:           xmin: -179.1473 ymin: 18.91383 xmax: 179.7785 ymax: 71.35256
epsg (SRID):    4269
proj4string:    +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs

I've attempted to use the following code to re-set the CRS using the following code:

Census_70.2 <- st_transform(st_set_crs(Census_70.1, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs"), crs = 4269, check = T) 

However, while the proj4string changes on Census_70.2, the geometry stays the same.

Simple feature collection with 34492 features and 9 fields
geometry type:  MULTIPOLYGON
dimension:      XY
bbox:           xmin: -7115713 ymin: -1295867 xmax: 2146924 ymax: 3476641
epsg (SRID):    NA
proj4string:    +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs

                         geometry
1  MULTIPOLYGON (((777980.6 -6...
2  MULTIPOLYGON (((797299.6 -6...
3  MULTIPOLYGON (((781590.6 -7...
4  MULTIPOLYGON (((788040.7 -7...
5  MULTIPOLYGON (((782468.1 -7...
6  MULTIPOLYGON (((783828.9 -7...
7  MULTIPOLYGON (((776624.7 -7...
8  MULTIPOLYGON (((775274.6 -7...
9  MULTIPOLYGON (((791123.2 -7...
10 MULTIPOLYGON (((797096.8 -7...

Furthermore, by running the transformation code, it distorts the map from its original format in Census_70.1 enter image description here

To this distortion in Census_70.2 enter image description here

What am I doing incorrectly?

2
st_transform(Census_70.1, "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs")Rich Pauloo

2 Answers

1
votes

target_crs <- st_crs(congressional_district_data)

census_70.2 <- st_transform(census_70.1, target_crs)

I think that should do it but you can check out this nice site/book "geocomputation with R" by Robin Lovelace for more if it doesn't or just to get a better handle on it.

I think you had an extra st_set_crs you didn't need. It's my understanding that function sets the objects field CRS (what is returned by st_crs() but doesn't actually reproject anything.

https://geocompr.robinlovelace.net/reproj-geo-data.html#reproj-vec-geom

-1
votes

from what i understood

library(raster) #it will load also the sp library
destinationcrs <- "+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs"
Census_70.2 <-  spTransform(Census_70.1,destinationcrs)