Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 地图不';不要注册奇怪的形状_R_Google Maps_Google Maps Api 3_Maps_Spatial - Fatal编程技术网

R 地图不';不要注册奇怪的形状

R 地图不';不要注册奇怪的形状,r,google-maps,google-maps-api-3,maps,spatial,R,Google Maps,Google Maps Api 3,Maps,Spatial,我正在和我的一位教授一起进行一些研究,旨在改进目前的碳核算方法。我们注意到,如果没有位置数据,则点源的许多位置默认为其所在县的质心(这是目前美国特有的,但将在全球范围内应用) 所以我用R来解决与这些位置相关的不确定性。我的代码获取一个县的经纬度范围,并绘制10000个点。然后剔除不在县里的点,取剩余点的平均值来定位质心。我的目标是最终获得这些点和质心之间的差异,以找到放置在质心中的点源的空间不确定性 然而,我在沿海地区遇到了问题。我的第一个问题是,“地图”包忽略了孤岛(例如屏障孤岛)以及其他不相

我正在和我的一位教授一起进行一些研究,旨在改进目前的碳核算方法。我们注意到,如果没有位置数据,则点源的许多位置默认为其所在县的质心(这是目前美国特有的,但将在全球范围内应用)

所以我用R来解决与这些位置相关的不确定性。我的代码获取一个县的经纬度范围,并绘制10000个点。然后剔除不在县里的点,取剩余点的平均值来定位质心。我的目标是最终获得这些点和质心之间的差异,以找到放置在质心中的点源的空间不确定性

然而,我在沿海地区遇到了问题。我的第一个问题是,“地图”包忽略了孤岛(例如屏障孤岛)以及其他不相交的县城形状,因此在对点进行平均时无法准确地再现质心。我的第二个问题是在库里托克县(北卡罗来纳州)发现的。地图似乎能识别出这个县的部分屏障岛屿,但由于它不是连续的,整个功能都不稳定,产生了一堆与该县实际边界完全不符的“NAs”和“FALSE”

(质心的数据将用于研究的其他领域,这就是为什么我们能够准确地访问所有县很重要。)

有没有办法避免我遇到的错误?可以读入的不同数据集,或任何类似的数据集?非常感谢你的帮助。如果对我的问题有任何疑问,请告诉我,我很乐意澄清

代码:

ggplot2有帮助 一些麻烦县:北卡罗来纳州、库里托克和马萨诸塞州、杜克斯

library(ggplot2)
library(maps)     # package has maps
library(mapproj)  # projections
library(sp)
    
WC <- map_data('county','north carolina,currituck') #calling on county
   
p <- ggplot(data = WC, aes(x = long, y = lat)) #calling on latitude and longitude
   
p1 <- p + geom_polygon(fill = "lightgreen") + theme_bw() + 
  coord_map("polyconic") + coord_fixed() #+ labs(title = "Watauga County")
 
p1
   
### range for the long and lat
    
RLong <- range(WC$long)
RLong
   
RLat <- range(WC$lat)
RLat
    
### Add some random points
   
n <- 10000  
RpointsLong <- sample(seq(RLong[1], RLong[2], length = 100), n, replace = TRUE)
RpointsLat <- sample(seq(RLat[1], RLat[2], length = 100), n, replace = TRUE)
DF <- data.frame(RpointsLong, RpointsLat)
head(DF)
   
p2<-p1 + geom_point(data = DF, aes(x = RpointsLong, y = RpointsLat))
p2
  
#      Source:
# http://www.nceas.ucsb.edu/scicomp/usecases/GenerateConvexHullAndROIForPoints
    
inside <- map.where('county',RpointsLong,RpointsLat)=="north carolina,currituck"
inside[which(nchar(inside)==2)] <- FALSE
inside
   
g<-inside*DF
g1<-subset(g,g$RpointsLong!=0)
g1
   
CentLong<-mean(g1$RpointsLong)
CentLat<-mean(g1$RpointsLat)
Centroid<-data.frame(CentLong,CentLat)
Centroid

p1+geom_point(data=g1, aes(x=RpointsLong,y=RpointsLat)) #this maps all the points inside county
p1+geom_point(data=Centroid, aes(x=CentLong,y=CentLat))
库(ggplot2)
库(地图)#包中有地图
图书馆(mapproj)#投影
图书馆(sp)

WC首先,根据您对问题的描述,我可能会投入大量精力来避免位置默认为县质心的业务-这是解决此问题的正确方法

第二,如果这是一个研究项目,我不会在R中使用内置的地图。美国地质调查局的网站有很好的功能。下面是在北卡罗来纳州使用Currituck县的示例

library(ggplot2)
library(rgdal)    # for readOGR(...)
library(rgeos)    # for gIntersection(...)

setwd("< directory contining shapefiles >")
map   <- readOGR(dsn=".",layer="countyp010")
NC    <- map[map$COUNTY=="Currituck County" & !is.na(map$COUNTY),]
NC.df <- fortify(NC)

bbox  <- bbox(NC)
x   <- seq(bbox[1,1],bbox[1,2],length=50)   # longitude
y   <- seq(bbox[2,1],bbox[2,2],length=50)   # latitude
all <- SpatialPoints(expand.grid(x,y),proj4string=CRS(proj4string(NC)))
pts <- gIntersection(NC,all)                # points inside the polygons
pts <- data.frame(pts@coords)               # ggplot wants a data.frame
centroid <- data.frame(x=mean(pts$x),y=mean(pts$y))
ggplot(NC.df)+
  geom_path(aes(x=long,y=lat, group=group),    colour="grey50")+      
  geom_polygon(aes(x=long,y=lat, group=group), fill="lightgreen")+
  geom_point(data=pts, aes(x,y), colour="blue")+
  geom_point(data=centroid, aes(x,y), colour="red", size=5)+
  coord_fixed()
库(ggplot2)
图书馆(rgdal)#用于readOGR(…)
图书馆(rgeos)#金特区(…)
setwd(“”)

映射不是我们将点源默认为质心,而是eGrid数据。这些位置由发电厂自己报告,如果没有报告,则默认为质心。这就是我们进行这项研究的部分原因。关于点源的一切都是非常时髦和不准确的。谢谢你的帮助!我不了解您项目的细节,但我建议,如果,例如,发电厂报告其排放量,但不报告其位置,则使用单独的数据源对发电厂进行地理定位是值得的。你一定有地址,不是吗?你不能给它们编地理编码吗?
polys <- do.call(rbind,lapply(NC@polygons[[1]]@Polygons,
                              function(x)c(x@labpt,x@area)))
polys <- data.frame(polys)
colnames(polys) <- c("long","lat","area")
polys$area      <- with(polys,area/sum(area))
centr           <- with(polys,c(x=sum(long*area),y=sum(lat*area)))
centr       # area weighted centroid
#           x         y 
#   -76.01378  36.40105 
centroid    # point weighted centroid (start= 50 X 50 points)
#           x        y
# 1 -76.01056 36.39671