2017-02-20 15 views
1

Я пытаюсь получить zipcode для координат lat-long в районе Нью-ЙоркаКак выполнить обратный геокод в R?

Я попытался использовать API обратного геокодирования из Google, но его количество ограничено 2500 хитами в день, поэтому можно обрабатывать мой фрейм данных в пакетном режиме.

Далее я попытался использовать библиотеку (zipcode) с zip-кодом набора данных, но не смог сопоставить долготу широты с координатами данных поезда, так как все координаты lat-long не находятся в наборе данных.

Дальше, хотя использование KNN для прогнозирования zipcode для набора данных, но не может получить правильные результаты.

zipcode_latlon = zipcode[zipcode$state=="NY",c(1,4,5)] 
train_latlon = train_data[,c("latitude","longitude")] 
zip1 = rep(10007, nrow(train_latlon)) 
zip1 = as.character(zip1) 
train_latlon = cbind(zip1, train_latlon) 
colnames(train_latlon) = c("zip","latitude","longitude") 
knn_fit = knn(zipcode_latlon, train_latlon,zipcode_latlon$zip, k=1) 

нужно знать, как я могу получить от лат Почтовых индексов долго в партии, любой метод будет хорошо в R.

+0

Это работает? –

+0

Спасибо! да, это сработало для меня. Но с трудом понимаете формат файла формы. Не удалось понять атрибуты в spTransform() –

+0

Оригинальный шейп-файл находится в системе координат NAD83. spTransform просто дает 'zips' другую систему ссылок - в данном случае WGS84. Важно, чтобы и точки, и многоугольники имели один и тот же CRS. Также можно оставить 'zips' так, как это было после импорта, а затем предоставить' spdf' NAD83 CRS с '+ proj = longlat + datum = NAD83 + no_defs + ellps = GRS80 + towgs84 = 0,0,0 '. В любом случае пространственные данные бессмысленны без системы отсчета. –

ответ

1

Я думаю, что вы собираетесь об этом неправильном пути. Вы можете найти почтовые индексы широты/долготы координат без с геокодер - все, что вам нужно, это загрузить американские Почтовые индексы шейп файл here, а затем сделать пространственную присоединиться:

library(sp) 
library(rgdal) 

#import zips shapefile and transform CRS 
zips <- readOGR("cb_2015_us_zcta510_500k.shp") 
zips <- spTransform(zips, CRS("+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0")) 

#here is a sample with three cities in New York State and their coordinates  
df <- as.data.frame(matrix(nrow = 3, ncol =3)) 
colnames(df) <- c("lat", "lon", "city") 

df$lon <- c(43.0481, 43.1610, 42.8864) 
df$lat <- c(-76.1474, -77.6109,-78.8784) 
df$city <- c("Syracuse", "Rochester", "Buffalo") 

df 
     lat  lon  city 
1 -76.1474 43.0481 Syracuse 
2 -77.6109 43.1610 Rochester 
3 -78.8784 42.8864 Buffalo 

#extract only the lon/lat     
xy <- df[,c(1,2)] 

#transform coordinates into a SpatialPointsDataFrame 
spdf <- SpatialPointsDataFrame(coords = xy, data = df, proj4string = CRS("+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0")) 

#subset only the zipcodes in which points are found 
zips_subset <- zips[spdf, ] 

#NOTE: the column in zips_subset containing zipcodes is ZCTA5CE10 
#use over() to overlay points in polygons and then add that to the original dataframe 

df$zip <- over(spdf, zips_subset[,"ZCTA5CE10"]) 

И вуаля! У вас есть почтовый индекс каждой точки

df 
     lat  lon  city ZCTA5CE10 
1 -76.1474 43.0481 Syracuse  13202 
2 -77.6109 43.1610 Rochester  14604 
3 -78.8784 42.8864 Buffalo  14202 
+0

Спасибо! Он работает теперь для меня , но не мог интерпретировать CRS ("+ проектируемый = longlat + нулевые точки = WGS84 + ellps = WGS84 + towgs84 = 0,0,0") Вероятно, я не понимаю, Spatial файла данных. Как мы смотрим на это? –