我尝试使用下面的链接中找到的R代码里面的修改版本转换纬度/经度坐标来定位时:不正确的NA回报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在密歇根州的地位。
当使用“世界”地图作为我的“映射”变量的形式参数时,代码返回“USA”。我一直在努力寻找解决方法,并没有运气。我玩过SpatialPointDataFrames,各种投影,并查看状态多边形对象本身。我在Windows 7系统上使用R版本3.3.1。我认为有问题的数据可能正在落在边界线上。在这种情况下,我认为会出现“不适用”。我使用的代码如下。
代码中使用:
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,迈阿密,佛罗里达州)。我无法找到更高分辨率的国家地图。我为世界使用了一个新的shapefile文件,并且能够解析附加的坐标,但仅限于国家而不是个人状态。是否可以将经纬度坐标添加到shapefile? –
另外,您知道如何从IP地址列表中解析位置?我已经看到了几种解决小批量的方法,但我一次对至少100,000个IP地址感兴趣。我查看了freegeoip,RDSTK软件包和Maxmind数据库,但都无法在如此大的范围内完成。 –
@DanA。如果上述数据还不够好,您可以尝试https://www.census.gov/cgi-bin/geo/shapefiles/index.php。我不知道任何其他更好的形状文件。我没有任何解析IP地址到坐标的经验。如果您无法通过网络搜索找到答案,也许您需要将其作为一个新问题提出。 – dww