使用O'Reilly's Data Mashups in R作为灵感,我试图在犹他州盐湖县的shapefile上绘制一些地址here。
我有数据框geoTable:
> geoTable
address Y X EID
1 130 E 300 S 40.76271 -111.8872 1
2 875 E 900 S 40.74992 -111.8660 2
3 2200 S 700 E 40.72298 -111.8714 3
4 702 E 100 S 40.76705 -111.8707 4
5 177 East 200 S 40.76518 -111.8859 5
6 702 3rd ave 40.77264 -111.8683 6
7 2175 S 900 E 40.72372 -111.8652 7
8 803 E 2100 S 40.72556 -111.8680 8
我已将其强制转换为eventData对象:
> addressEvents<-as.EventData(geoTable,projection=NA)
> addressEvents
address Y X EID
1 130 E 300 S 40.76271 -111.8872 1
2 875 E 900 S 40.74992 -111.8660 2
3 2200 S 700 E 40.72298 -111.8714 3
4 702 E 100 S 40.76705 -111.8707 4
5 177 East 200 S 40.76518 -111.8859 5
6 702 3rd ave 40.77264 -111.8683 6
7 2175 S 900 E 40.72372 -111.8652 7
8 803 E 2100 S 40.72556 -111.8680 8
所以看起来我已经拥有了我需要绘制的所有东西 - 但它不起作用。当我使用
加载shapefile和绘图时addPoints(addressEvents,col="red",cex=.5)
我还在看一个空的shapefile。另外,当我尝试对我的eventData对象运行findPolys时,它返回NULL。
> findPolys(addressEvents,myShapeFile)
NULL
我该如何使这项工作?我能够毫无问题地完成O'Reilly教程,并且很难弄清楚我在哪里出错了。我不知道它是shapefile,我的数据框架还是whateverelse。
以下是我用来导入数据和shapefile的命令
slc<-read.table('~/utah.txt',sep=',',header=TRUE,strip.white=TRUE,stringsAsFactors=FALSE)
myShapeFile<-importShapefile("/Users/neil/Downloads/SGID93_DEMOGRAPHIC_CensusTracts2000/SGID93_DEMOGRAPHIC_CensusTracts2000",readDBF=TRUE)
答案 0 :(得分:5)
您可能还想查看这些相关问题,尤其是在Eduardo的回复中:
答案 1 :(得分:4)
似乎PBSmapping使用一些粗略的启发式方法来计算.prj文件中的投影。 (参见help(importShapefile))。我个人不了解prj文件中的所有内容,但使用这个网站www.spatialreference.org我认为你的地图匹配
http://www.spatialreference.org/ref/epsg/26912/
每当我得到一个新的形状文件时,我会在这个网站上找到它的投影系统,然后查找proj4字符串,在这种情况下是 “+ proj = utm + zone = 12 + ellps = GRS80 + datum = NAD83 + units = m + no_defs”
(就像我说我不知道PBSmapping,但您可以使用maptools读取此内容,如下所示)
library(maptools)
sf=readShapeSpatial("SGID93_DEMOGRAPHIC_CensusTracts2000.shp",proj4string=CRS("+proj=utm +zone=12 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"))
然后使用
转换为latlonglibrary(rgdal)
sftransformed=spTransform(sf,CRS("+proj=longlat"))
和
积(sftransformed,轴= T)
给出了轴上正确单位的图。
不确定PBSmapping是否了解proj4字符串?看起来不诚实。