Я пытаюсь использовать модифицированную версию кода R, найденный в следующей ссылке:Неправильного возвращение NA при преобразовании Lat/Long Координаты на место в R
Latitude Longitude Coordinates to State Code in R
Чтобы проверить код, я создал следующие формальные аргументы:
mapping = "state"
pointsDF = data.frame(x = c(-88.04607, -83.03579), y = c(42.06907, 42.32983))
latlong2state(pointsDF, mapping)
код возвращается следующее:
[1] "Illinois" NA
Первый набор координат возвращает правильный ответ, то есть «Иллинойс». Однако, когда я ввести второй набор координат (т.е. -83,03579, 42,32983) в онлайн-конвертер, я получаю следующее:
Downtown, Detroit, MI, USA
(http://www.latlong.net/Show-Latitude-Longitude.html)
Выполнение кода еще раз, но меняя второй координаты от 42.32983 до 43.33 ставит точку в штате Мичиган.
При использовании «мировой» карты в качестве моего официального аргумента для переменной «mapping» код возвращает «USA». Я много дней боролся за то, чтобы понять это и не повезло. Я играл с SpatialPointDataFrames, различными проекциями и изучал сами объекты полигона. Я использую R версии 3.3.1 в системе Windows 7. Я думаю, что данный пункт данных может падать на границе. В этом случае, я думаю, ожидается «НС». Код, который я использовал, приведен ниже.
Код Использована
library(sp)
library(maps)
library(maptools)
library(rgdal)
latlong2state = function(pointsDF, mapping) {
local.map = map(database = mapping, fill = TRUE, col = "transparent", plot = FALSE)
IDs = sapply(strsplit(local.map$names, ":"), function(x) x[1])
maps_sp = map2SpatialPolygons(map = local.map, ID = IDs,
proj4string = CRS("+proj=longlat +datum=WGS84"))
pointsSP = SpatialPoints(pointsDF,
proj4string = CRS("+proj=longlat +datum=WGS84"))
indices = over(x = pointsSP, y = maps_sp)
mapNames = sapply([email protected], function(x) {[email protected]})
mapNames[indices]
}
Я всего два месяца для обучения R и любить язык до сих пор. Это был первый раз, когда я не мог найти ответа. Я бы очень признателен за помощь, оказанную по этому вопросу !!!
Спасибо! Карта с высоким разрешением разрешила примерно дополнительные 1000 пар координат. Тем не менее, еще есть еще несколько, которые находятся в пределах США и не разрешаются (например, Широта: 25,72, Долгота: -80,23, Майами, штат Флорида). Я не мог найти карту более высокого разрешения для состояний. Я использовал новый шейп-файл для мира и смог разрешить дополнительные координаты, но только для страны, а не для отдельного государства. Можно ли добавить координаты lat/long в шейп-файл? –
Также вы знаете, как разрешить местоположение из списка IP-адресов? Я видел несколько способов решения небольших партий, но меня интересует как минимум 100 000 IP-адресов за раз. Я просмотрел пакет freegeoip, RDSTK и базу данных Maxmind и не смог сделать это в таких больших масштабах. –
@DanA. если вышеуказанные данные все еще недостаточно хороши, вы можете попробовать https://www.census.gov/cgi-bin/geo/shapefiles/index.php. Я не знаю других улучшенных шейп-файлов. У меня нет опыта в решении IP-адресов для координат. Возможно, вам нужно задать вопрос в качестве нового вопроса, если вы не можете найти ответ с помощью веб-поиска. – dww