我很难让我的数据框在传单中绘制。我有一个 shapefile 和一个 csv 合并在一起。生成的数据帧有几列,包括 long、lat 和“percent”。
我可以使用 ggplot 和以下代码绘制它:
p <- ggplot() +
geom_polygon(data = nyc_plotData, aes(x=long, y=lat, group = group,
fill=percent)) +
geom_polygon(data = county, aes(x=long, y=lat, group = group),
fill=NA, color = "black", size = 0.25) +
coord_map(xlim = c(-74.26, -73.71), ylim = c(40.49,40.92))
Run Code Online (Sandbox Code Playgroud)
结果是纽约收入分布的区域分布图:

当我尝试在传单中使用相同的数据框时,出现此错误:
不知道如何从类 data.frame 的对象中获取路径数据
我知道我必须重新格式化我的数据框。我尝试了各种方法来转换为 SpatialPolygonDataFrame。例如:
xy <- nyc_plotData[,c(1,2)]
spdf <- SpatialPolygonsDataFrame(coords = xy, data = nyc_plotData,
proj4string = CRS("+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0"))
Run Code Online (Sandbox Code Playgroud)
给出以下错误:
SpatialPolygonsDataFrame(coords = xy, data = nyc_plotData, proj4string = …
问题:我想从shapefile中提取两个站点之间沿铁路网络的路线,并且仅绘制此特定路线,而不是整个网络。
这是我到目前为止的内容:
我在英国的整个铁路网络中都有一个shapefile,将其绘制如下:
library(maptools)
rail <- readShapeSpatial("railnetworkLine.shp")
Run Code Online (Sandbox Code Playgroud)
我也有一个包含Eastings和Northings的电台列表,例如:
1) ABDARE 300400 202800
2) DEIGHTN 416490 419140
Run Code Online (Sandbox Code Playgroud)
我可以将它们添加到地图中,如下所示:
plot(rail)
plot(spdf.station, add=TRUE, col="red", pch=20)
Run Code Online (Sandbox Code Playgroud)
因此,我不知道如何提取它们之间的路线并绘制该路线-信息显然在shapefile中,并且我具有测站的坐标,但我不知道如何提取它。
我设法用以下代码计算了它们之间的距离:
SpacingInMetres <- 10000
require(secrlinear)
network <- read.linearmask(data=rail, spacing=SpacingInMetres)
distance <- (networkdistance (stations[1,], stations[2,], network))/1000
# Confirm distance:
distance
>311.7893
Run Code Online (Sandbox Code Playgroud)
而且我发现您可以使用Google Maps获取沿道路的路线ggmaps(请参阅此处)。但是,如果将shapefile作为网络输入而不是Google Maps,该怎么办?
我认为也许'shp2graph'+'igraph'软件包很有用,但我无法弄清楚。有什么想法吗?
我试图弄清楚如何使用 Shiny App,用户可以通过 fileInput 提交 shapefile,然后将其映射到传单底图上。我被困在 server.R 脚本上,不确定如何处理用户提交的 shapefile 并将其转换为空间数据框对象。
过去我使用 shape2sql 将形状文件导入 SQL Server。
我在较新的 Windows 10 机器上再次尝试了这条路线,但在尝试使用该应用程序时似乎没有任何反应。
对于让 shape2sql 工作或将形状文件上传到 SQL Server 的替代方法有什么建议吗?
我似乎无法打开从 ( http://www.vdstech.com/usa-data.aspx )下载的 zip3.zip 形状文件
这是我的代码:
import geopandas as gpd
data = gpd.read_file("data/zip3.shp")
Run Code Online (Sandbox Code Playgroud)
这给了我错误:
CPLE_AppDefinedError: b'Recode from CP437 to UTF-8 failed with the error: "Invalid argument".'
Run Code Online (Sandbox Code Playgroud) 样本数据
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) 我正在尝试将 df (xyz/latlonvalue) 中的点绘制为geom_sfshapefile 上的栅格。我尝试了另一篇文章中的答案,但没有一个有帮助。数据结构如下。
首先,我尝试raster::rasterFromXYZ(df)使用其他页面上的答案中的代码,但它不起作用。每次尝试都会收到相同的错误消息。
structure(list(x = c(-87.001233, -87.416633, -86.999683, -86.58395,
-86.998233, -86.998233, -86.998233, -86.998233, -87.416633, -87.416633,
-87.416633, -87.416633, -87.001233, -87.001233, -87.001233, -87.001233,
-87.001233, -87.001233, -87.001233, -87.001233, -87.001233, -87.001233,
-86.58395, -86.58395, -86.58395, -86.58395, -86.999683, -86.999683,
-86.999683, -86.999683, -86.916517, -86.965333, -87.233917, -86.721362,
-86.916517, -86.916517, -86.916517, -86.916517, -86.916517, -86.916517,
-86.916517, -86.916517, -86.916517, -86.916517, -86.766867, -86.766867,
-86.766867, -86.766867, -87.233917, -87.233917, -87.233917, -87.233917,
-86.965333, -86.965333, -86.965333, -86.965333, -86.721362, -86.721362,
-86.721362, -86.721362, -86.721362, -86.721362, -86.721362, -86.721362,
-86.721362, -86.721362, -86.721362, -86.37455, …Run Code Online (Sandbox Code Playgroud) 我正在使用R常规数据框(df)和形状文件(map2),它们共享一个名为 的公共列CD116FP。df有 103552 行,而map2有 444 行。我通过以下方式加载 shapefile:
map2 <- read_sf("D:/Data/tl_2019_us_cd116.shp")
我的最终目标是使用该功能mapview()来查看包含在列下map2描述的“强度”的地图。因此,我不希望没有出现在 上的观察结果。dfnp_scoresdfmap2
以下是我的想法和失败:
如果这两个对象是常规数据帧,则合理的候选者是用于merge()组合两个对象,但是如果在这种情况下应用该函数,生成的对象将失去空间属性并且mapview不知道如何读取它。
我使用的另一种方法是尝试这行代码:
map2m<-data.frame(map2, df[匹配(map2$CD116FP, df$CD116FP),])
但结果的尺寸太大(比 444 行大得多),因此mapview在尝试绘制所需地图时会崩溃。
np到map2:map2$np=10
for (i in c(1:nrow(map2)))
{
for (j in c(1:nrow(df)))
{
if (identical(map2$CD116FP[i],df$CD116FP[j]))
{map2$np[i]=df$np_score[j]}
else {map2$np[i]=0}
}
}
Run Code Online (Sandbox Code Playgroud)
然而,考虑到我的数据框的尺寸,这种方法花费了太多时间。
你有什么建议吗?
我正在尝试将 Geopandas 数据框保存到直接写入压缩文件夹的 shapefile 中。
任何 shapefile 用户都知道,shapefile 不是单个文件,而是旨在一起读取的文件集合。所以呼吁 myGDF.to_file(filename='myshapefile.shp', driver='ESRI Shapefile')不仅创造myshapefile.shp而且myshapefile.prj,myshapefile.dbf,myshapefile.shx和myshapefile.cpg。这可能就是我努力在这里获得语法的原因。
例如,考虑一个虚拟的 Geopandas 数据框,例如:
import pandas as pd
import geopandas as gpd
from shapely.geometry import Point
data = pd.DataFrame({'name': ['a', 'b', 'c'],
'property': ['foo', 'bar', 'foo'],
'x': [173994.1578792833, 173974.1578792833, 173910.1578792833],
'y': [444135.6032947102, 444186.6032947102, 444111.6032947102]})
geometry = [Point(xy) for xy in zip(data['x'], data['y'])]
myGDF = gpd.GeoDataFrame(data, geometry=geometry)
Run Code Online (Sandbox Code Playgroud)
我看到人们使用gzip,所以我尝试:
import geopandas as gpd
myGDF.to_file(filename='myshapefile.shp.gz', driver='ESRI Shapefile',compression='gzip')
Run Code Online (Sandbox Code Playgroud)
但它没有用。
然后我尝试了以下操作(在 …
我已通过 geopandas 成功从我的 S3 存储桶中读取了 zip 格式的 shapefile,但在尝试将相同的地理数据帧作为 shapefile 输出到同一 S3 存储桶时出现错误。
下面的代码是我读取 zip 文件的方式,效果很好:
## session for connecting to S3
session = boto3.session.Session(aws_access_key_id='MY-KEY-ID',
aws_secret_access_key='MY-KEY')
s3 = session.resource('s3')
bucket = s3.Bucket('my_bucket')
## read shapefile
TPG = bucket.Object(key='/shapefiles/grid.zip')
TPGrid = geopandas.read_file(TPG.get()['Body'])
Run Code Online (Sandbox Code Playgroud)
但是当我尝试输出相同的地理数据框时,如下所示:
TPGrid.to_file(filename='s3://my_bucket/output/TPGrid.zip', driver='ESRI Shapefile')
Run Code Online (Sandbox Code Playgroud)
我会得到错误代码:
ERROR:fiona._env:Only read-only mode is supported for /vsicurl
ERROR:fiona._env:Only read-only mode is supported for /vsicurl
ERROR:fiona._env:Only read-only mode is supported for /vsicurl
ERROR:fiona._env:Unable to open /vsis3/my_bucket/output/TPGrid.zip/TPGrid.shp or /vsis3/my_bucket/output/TPGrid.zip/TPGrid.SHP.
Traceback (most recent call last):
File "fiona/ogrext.pyx", line …Run Code Online (Sandbox Code Playgroud)