代码之家  ›  专栏  ›  技术社区  ›  Neil Kodner

使用pbsmapping和shapefiles帮助在r中绘制地理数据

  •  6
  • Neil Kodner  · 技术社区  · 15 年前

    使用 O'Reilly's Data Mashups in R 犹他州盐湖县的一个形状文件中发现了一些地址,作为灵感来源,我正试图将其绘制出来。 here .

    我有数据帧地质表:

    > 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)
    

    我在看一个空的形状文件。此外,当我尝试对我的EventData对象运行findpolys时,它返回空值。

    > findPolys(addressEvents,myShapeFile)
    NULL
    

    我怎样才能做到这一点?我能够毫无问题地完成O'Reilly教程,并且很难确定我在这里哪里出错。我不知道它是形状文件,我的数据框架,还是其他什么。

    以下是用于导入数据和形状文件的命令

    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)
    
    2 回复  |  直到 15 年前
        1
  •  5
  •   Community Marks    7 年前

    你也可以看看这些相关的问题,尤其是爱德华多的回答:

        2
  •  4
  •   Ira Cooke    15 年前

    似乎pbsmapping使用一些粗糙的启发式方法来计算.prj文件中的投影。(请参阅帮助(导入形状文件))。我个人并不了解prj文件中的所有内容,但使用这个网站www.spaceialreference.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"))
    

    然后使用转换为latlong

    library(rgdal)
    
    sftransformed=spTransform(sf,CRS("+proj=longlat"))
    

    绘图(sftransformed,axes=t)

    给出轴上具有正确单位的绘图。

    不确定pbsmapping是否理解proj4字符串?看起来不诚实。