Here is another working code that explains what happens:
# convert a state-plane coordinate to lat/long data = data.frame(x=400000,y=0) coordinates(data) <- ~ x+y proj4string(data) <- CRS("+init=epsg:2804") latlong = data.frame(spTransform(data, CRS("+init=epsg:4326"))) setnames(latlong,c("long","lat")) latlong
gives:
long lat 1 -77 37.66667
and
# convert a lat/long to state-plane data = latlong coordinates(data) <- ~ long+lat proj4string(data) <- CRS("+init=epsg:4326") xy = data.frame(spTransform(data, CRS("+init=epsg:2804"))) setnames(xy,c("y","x")) xy
gives:
> xy yx 1 4e+05 -2.690839e-08
And here is the function:
# this is for Maryland lat_long_to_xy = function(lat,long) { library(rgdal) library(sp) data = data.frame(long=long, lat=lat) coordinates(data) <- ~ long+lat proj4string(data) <- CRS("+init=epsg:4326") xy = data.frame(spTransform(data, CRS("+init=epsg:2804"))) setnames(xy,c("y","x")) return(xy[,c("x","y")]) }
source share