标签: shapefile

在传单中绘制 shp 文件,适用于 ggplot

我很难让我的数据框在传单中绘制。我有一个 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 = …

r shapefile leaflet

6
推荐指数
1
解决办法
5488
查看次数

从铁路网络shapefile提取车站之间的路线

问题:我想从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'软件包很有用,但我无法弄清楚。有什么想法吗?

r geospatial shapefile igraph

6
推荐指数
1
解决办法
364
查看次数

如何将shapefile上传到Shiny App

我试图弄清楚如何使用 Shiny App,用户可以通过 fileInput 提交 shapefile,然后将其映射到传单底图上。我被困在 server.R 脚本上,不确定如何处理用户提交的 shapefile 并将其转换为空间数据框对象。

r shapefile leaflet shiny

6
推荐指数
1
解决办法
491
查看次数

如何将形状文件导入 SQL Server?

过去我使用 shape2sql 将形状文件导入 SQL Server。

我在较新的 Windows 10 机器上再次尝试了这条路线,但在尝试使用该应用程序时似乎没有任何反应。

对于让 shape2sql 工作或将形状文件上传到 SQL Server 的替代方法有什么建议吗?

sql-server shapefile

6
推荐指数
2
解决办法
8214
查看次数

无法使用 GeoPandas 打开形状文件

我似乎无法打开从 ( 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)

python shapefile geopandas

6
推荐指数
1
解决办法
8355
查看次数

使用 ggplot 绘制 shapefile 和 gganimate 动画

样本数据

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)

r shapefile ggplot2 rgdal gganimate

6
推荐指数
1
解决办法
1575
查看次数

rasterFromXYZ() rasterFromXYZ() 中的错误:x 像元大小不规则

我正在尝试将 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 raster shapefile ggplot2 r-sf

6
推荐指数
1
解决办法
1381
查看次数

合并形状文件和数据框

我正在使用R常规数据框(df)和形状文件(map2),它们共享一个名为 的公共列CD116FPdf有 103552 行,而map2有 444 行。我通过以下方式加载 shapefile:

map2 <- read_sf("D:/Data/tl_2019_us_cd116.shp")

我的最终目标是使用该功能mapview()来查看包含在列下map2描述的“强度”的地图。因此,我不希望没有出现在 上的观察结果。dfnp_scoresdfmap2

以下是我的想法和失败:

  1. 如果这两个对象是常规数据帧,则合理的候选者是用于merge()组合两个对象,但是如果在这种情况下应用该函数,生成的对象将失去空间属性并且mapview不知道如何读取它。

  2. 我使用的另一种方法是尝试这行代码:

map2m<-data.frame(map2, df[匹配(map2$CD116FP, df$CD116FP),])

但结果的尺寸太大(比 444 行大得多),因此mapview在尝试绘制所需地图时会崩溃。

  1. 最后,我全力以赴,构建了一个循环来将列添加npmap2
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)

然而,考虑到我的数据框的尺寸,这种方法花费了太多时间。

你有什么建议吗?

merge r shapefile r-mapview

6
推荐指数
1
解决办法
4407
查看次数

将 Geopandas 数据框直接导出到压缩的 shapefile

我正在尝试将 Geopandas 数据框保存到直接写入压缩文件夹的 shapefile 中。

任何 shapefile 用户都知道,shapefile 不是单个文件,而是旨在一起读取的文件集合。所以呼吁 myGDF.to_file(filename='myshapefile.shp', driver='ESRI Shapefile')不仅创造myshapefile.shp而且myshapefile.prjmyshapefile.dbfmyshapefile.shxmyshapefile.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)

但它没有用。

然后我尝试了以下操作(在 …

python shapefile zipfile geopandas

6
推荐指数
2
解决办法
576
查看次数

在 Glue Python Shell 中使用 geopandas 将 Shapefile 写入 AWS S3

我已通过 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)

amazon-s3 shapefile python-3.x geopandas aws-glue

6
推荐指数
0
解决办法
1596
查看次数