我有坐标,所有这些都应该位于DC中,但是我无法弄清楚如何将它们从NAD 83转换为R中的纬度和经度.我正在使用spTransform()rgdal包中的函数并得到关于不符合的错误数据.
library(rgdal)
nad83_coords <- data.frame(x=c(396842.6, 397886.9, 398315.5, 398154.3, 398010.3), y=c(140887.1, 139847.0, 138743.9, 139534.5, 138697.3))
coordinates(nad83_coords) <- c('x', 'y')
proj4string(nad83_coords) <- CRS("+init=epsg:4269")
Error in `proj4string<-`(`*tmp*`, value = <S4 object of class "CRS">) :
Geographical CRS given to non-conformant data: 398315.5 140887.1
Run Code Online (Sandbox Code Playgroud)
proj4strings的其他组合产生相同的错误.我相信错误是因为坐标太大,但我不确定为什么会这样.坐标文档如下:
值在马里兰州立方米米NAD 83地图投影中.
我对绘图和投影很新,任何帮助都表示赞赏.
我有一些非常大的shapefile.我可以SpatialPolygonsDataFrame使用该rgdal函数将它们读入readOGR,但每个文件需要很长时间.我实际上只对插槽data.frame中显示的内容感兴趣@data.有没有办法只读取数据,跳过资源密集型多边形?
示例代码:
## State of Alabama census blocks (152 MB compressed, 266 MB uncompressed)
shpurl <- "http://www2.census.gov/geo/tiger/TIGER2011/TABBLOCK/tl_2011_01_tabblock.zip"
tmp <- tempfile(fileext=".zip")
download.file(shpurl, destfile=tmp)
unzip(tmp, exdir=getwd())
## Read shapefile
nm <- strsplit(basename(shpurl), "\\.")[[1]][1]
lyr <- readOGR(dsn=getwd(), layer=nm)
## Data I want
head(lyr@data)
Run Code Online (Sandbox Code Playgroud) 我试图在这个问题中做同样的事情,在R中的Cartogram + choropleth map,但是从SpatialPolygonsDataFrame开始并希望最终得到相同类型的对象.
我可以将对象保存为shapefile,使用scapetoad,重新打开它并转换回来,但我宁愿将它全部放在R中,以便程序完全可重现,这样我就可以自动编写几十种变体.
我已经在github上分配了Rcartogram代码,并在此处添加了我的努力.
本演示的基本内容是在地图上创建一个SpatialGrid,在网格的每个点查找人口密度,并将其转换为cartogram()处理所需格式的密度矩阵.到现在为止还挺好.
但是,如何根据输出来插入原始地图点cartogram()?
这里有两个问题.第一种是将地图和网格放入相同的单位以允许插值.第二种是访问每个多边形的每个点,对其进行插值,并使它们保持正确的顺序.
网格以网格为单位,地图以投影单位表示(在示例longlat的情况下).必须将网格投影到longlat中,或将地图投影到网格单元中.我的想法是制作一个伪CRS并将其与spTransform()函数一起使用package(rgdal),因为它可以轻松处理对象中的每个点.
访问每个点很困难,因为它们是SpPDF对象的几个层:对象>多边形>多边形>线>坐标我认为.任何想法如何访问这些,同时保持整个地图的结构完整?
我有一个SpatialPolygonsDataFrame,我使用以下命令绘制:
spplot(milanoNILNew, "percPolVita",at = c(0,0.0696,0.08979,0.0974,0.1116,0.181),col.regions =pal,main="Quota Clienti Unipol con Polizze Vita ")
Run Code Online (Sandbox Code Playgroud)
我使用以下命令创建了一个spatialPointsDataFrame
agenziePoints<-SpatialPointsDataFrame(coords=datiAgenzie[,c("Long","Lat")],data=datiAgenzie,proj4string = llCRS, match.ID = TRUE).
Run Code Online (Sandbox Code Playgroud)
我可以绘制多边形,但我无法在同一个图上表示多边形上的agenziePoints.在此先感谢您的支持.
我试图安装rgdal使用configure.args,但没有运气.
已安装的gdal版本:
gdal-config --version
1.11.2
ogrinfo --version
GDAL 1.11.2, released 2015/02/10
Run Code Online (Sandbox Code Playgroud)
找到了gdal二进制工具:
ls /usr/bin | grep gdal
gdal2tiles.py
gdal2xyz.py
gdaladdo
gdal_auth.py
gdalbuildvrt
gdal_calc.py
gdalchksum.py
gdalcompare.py
gdal-config
gdal_contour
gdaldem
gdal_edit.py
gdalenhance
gdal_fillnodata.py
gdal_grid
gdalident.py
gdalimport.py
gdalinfo
gdallocationinfo
gdalmanage
gdal_merge.py
gdalmove.py
gdal_polygonize.py
gdal_proximity.py
gdal_rasterize
gdal_retile.py
gdalserver
gdal_sieve.py
gdalsrsinfo
gdaltindex
gdaltransform
gdal_translate
gdalwarp
Run Code Online (Sandbox Code Playgroud)
找到proj头文件:
ls /usr/include | grep proj
libprojectM
libprojectM-qt
org_proj4_Projections.h
proj_api.h
projects.h
Run Code Online (Sandbox Code Playgroud)
找到了proj lib文件:
ls /usr/lib | grep proj
libproj.a
libprojectM-qt.so
libprojectM-qt.so.1
libprojectM-qt.so.1.10
libprojectM.so
libprojectM.so.2
libprojectM.so.2.1.0
libproj.la …Run Code Online (Sandbox Code Playgroud) 首先,我是R的新手所以请耐心等待.
我最终要完成的是用Leaflet展示阿姆斯特丹的互动地图.为此,我正在使用RGDAL来读取shapefile.
此链接包含阿姆斯特丹的shapefile.
我正在使用以下代码来读取shapefile并显示地图.
amsterdam <- readOGR(".", layer = "sd2010zw_region", verbose = FALSE)
leaflet(amsterdam) %>%
addProviderTiles("CartoDB.Positron", options= providerTileOptions(opacity = 0.99)) %>%
addPolygons(
stroke = FALSE, fillOpacity = 0.5, smoothFactor = 0.5
)
Run Code Online (Sandbox Code Playgroud)
我得到的是CartoDB.Positron的地图,而不是第二层的'polygonmap'.我得到的是包含各种数据的SpatialPolygonsDataFrame.
另一方面,当我使用绘图方法时,我得到了阿姆斯特丹的地图
plot(amsterdam, axes=TRUE, border="gray")
Run Code Online (Sandbox Code Playgroud)
但我不想使用情节,我想使用Leaflet :)
我在这做错了什么?
样本数据
library(raster)
library(ggplot2)
my.shp <- getData('GADM', country = 'FRA', level = 1)
plot(my.shp)
Run Code Online (Sandbox Code Playgroud)
如果我想使用 ggplot 绘制此数据:
my.shp_f <- fortify(my.shp, region = "ID_1")
ggplot(data = my.shp_f, aes(long, lat, group = group)) + geom_polygon(fill = "grey80")
Run Code Online (Sandbox Code Playgroud)
问题一:为什么行政边界消失了?
问题 2: 我有另一个数据框,其中包含每个行政区划从第 1 天到第 365 天的 2 年日降雨量数据。
rain.data <- data.frame(ID_1 = rep(my.shp@data$ID_1, each = 2 * 365),
year = rep(rep(1981:1982, each = 365), times = 2),
day = rep(1:365, times = 4),
rain = sample(1:20, replace = T, 2 * 365 * …Run Code Online (Sandbox Code Playgroud) 我试图在我的 Ubuntu 18.04 机器上再次安装 SF,因为它给了我一些问题。由于我想开始一切清理,我尝试了以下操作:
remove.packages("sf")
install.packages("sf")
Run Code Online (Sandbox Code Playgroud)
然而,这导致了以下错误。
checking GDAL: checking whether PROJ is available fur running:... double free or corruption (out)
./configure: line 3625: 20789 Aborted (core dumped) ./gdal_proj
no
configure: error: OGRCoordinateTransformation() does not return a coord.trans: PROJ not available?
ERROR: configuration failed for package ‘sf’
* removing ‘/home/derek/R/x86_64-pc-linux-gnu-library/3.6/sf’
Run Code Online (Sandbox Code Playgroud)
当我看到消息double free or corruption (out) 时,我查看并意识到这是一个 c++ 问题,如此链接和此链接所示。但即使我知道问题应该出在 PROJ 中,我什至不知道从哪里开始。
我尝试重新安装 rgdal 以查看是否像上面一样神奇地解决了问题
remove.packages("rgdal")
install.packages("rgdal")
Run Code Online (Sandbox Code Playgroud)
这导致了类似的结果
** testing if installed package …Run Code Online (Sandbox Code Playgroud) rgdal_1.5-15在 R 中安装时出现以下错误(我使用的是 Ubuntu 18.04.4 LTS GNU/Linux 4.15.0-112-generic x86_64):
projectit.cpp:159:6: error: conflicting declaration of C function ‘SEXPREC* transform_ng(SEXP, SEXP, SEXP, SEXP, SEXP, SEXP, SEXP)’
SEXP transform_ng(SEXP fromargs, SEXP toargs, SEXP coordOp, SEXP npts, SEXP x, SEXP y, SEXP z SEXP aoi) {
^~~~~~~~~~~~
In file included from projectit.cpp:11:0:
rgdal.h:132:6: note: previous declaration ‘SEXPREC* transform_ng(SEXP, SEXP, SEXP, SEXP, SEXP, SEXP, SEXP, SEXP)’
SEXP transform_ng(SEXP fromargs, SEXP toargs, SEXP coordOp, SEXP npts, SEXP x, SEXP y, SEXP z, SEXP aoi); // …Run Code Online (Sandbox Code Playgroud) 我想使用以太平洋地区(特别是澳大利亚)为中心的 Mollweide 投影,使用 rnaturalearth--> sf-->ggplot管道在 R 中绘制世界地图。
我遇到了一个恼人的问题,即在全球范围内连接线路。
从新的 R 会话中,我运行
library(tidyverse)
library(rnaturalearth)
library(rnaturalearthdata)
library(sf)
target_crs <- st_crs("+proj=moll +x_0=0 +y_0=0 +lat_0=0 +lon_0=133")
worldrn <- ne_countries(scale = "medium", returnclass = "sf") %>%
sf::st_transform(crs = target_crs)
ggplot(data = worldrn, aes(group = admin)) +
geom_sf()
Run Code Online (Sandbox Code Playgroud)
生成这个图
这是我的sessionInfo():
R version 4.1.0 (2021-05-18)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Catalina 10.15.7
Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRblas.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRlapack.dylib
locale:
[1] en_AU.UTF-8/en_AU.UTF-8/en_AU.UTF-8/C/en_AU.UTF-8/en_AU.UTF-8
attached base packages:
[1] stats graphics grDevices utils …Run Code Online (Sandbox Code Playgroud)