很抱歉没有包含我的问题的任何示例数据.我找不到轻松生成示例形状文件的方法.希望有经验的用户ggplot可以从下面的描述中看到我想做的事情.
我有:
一个data.frameX与约样地信息(plotid,var1,var2,var3,var4,...)
Y具有样本图的空间信息的多边形shapefile
导入shapefile Y(with maptools)和fortifying as data.frame Z(ggplot2)可以正常工作.melt荷兰国际集团X以X_melted作品同样精致.merge-ing Z并X_melted以mapdf作品为好.
这意味着,现在我们有一个data.frame长形式的空间信息和var1,var2,var3,...
现在我想绘制这样的数据框:
pl1 <- ggplot(mapdf,aes(long,lat),group=group)
pl1 <- pl1 + geom_polygon(aes(group=group,fill=value),colour="black")
pl1 <- pl1 + facet_grid(variable ~ .)
pl1 <- pl1 + coord_equal(ratio = 1)
pl1
Run Code Online (Sandbox Code Playgroud)
结果是一个很好的情节,每个变量有一个面板.面板的地图是相同的,但填充颜色随变量的值而变化.到目前为止,一切都像魅力......有一个问题: …
我使用{光栅}夹(或作物)的基础上的不规则shape文件(亚马逊生物群落),但输出总是具有矩形程度的栅格.不过,我需要在shape文件完全相同的几何形状的输出.有小费吗?干杯.
library(raster)
library(rgdal)
myshp <- readOGR("Amazon.shp", layer="Amazon")
e <- extent(myshp)
myraster <- raster("Temperature.tif")
myraster.crop <- crop(myraster, e, snap="out", filename="myoutput.tif")
Run Code Online (Sandbox Code Playgroud) 我的目标是在Python中创建加拿大的等值线图.假设我有一个字典,其中的值指的是每个加拿大省/地区:
myvalues={'Alberta': 1.0,
'British Columbia': 2.0,
'Manitoba': 3.0,
'New Brunswick': 4.0,
'Newfoundland and Labrador': 5.0,
'Northwest Territories': 6.0,
'Nova Scotia': 7.0,
'Nunavut': 8.0,
'Ontario': 9.0,
'Prince Edward Island': 10.0,
'Quebec': 11.0,
'Saskatchewan': 12.0,
'Yukon': 13.0}
Run Code Online (Sandbox Code Playgroud)
现在我想myvalues使用连续的色彩图(例如,红色阴影)基于相应的值为每个省着色.怎么做?
到目前为止,我只能在matplotlib中绘制加拿大各省/地区,但它们的形状呈现出独特的颜色,我不知道如何根据数字改变它myvalues(也许我需要玩,patches但我不知道怎么样).
您可以在这里找到shapefile:http://www.filedropper.com/canadm1_1
这是我迄今为止的代码:
import shapefile
import matplotlib.pyplot as plt
import matplotlib.patches as patches
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection
# -- input --
sf = shapefile.Reader("myfolder\CAN_adm1.shp")
recs = sf.records()
shapes …Run Code Online (Sandbox Code Playgroud) 有没有人有从C++ 处理(阅读)ESRI shapefile(http://en.wikipedia.org/wiki/Shapefile)的经验?
我找到了至少2个开源库:ShapeLib C库(http://shapelib.maptools.org/)和OGR(http://www.gdal.org/ogr/).哪一个更好?有人用过其中一个吗?体验怎么样?
如何从全局管理区域添加多边形,以便可以单击它们.
docs我试过的简单方法描述的是
adm <- getData('GADM', country='UKR', level=1)
leaflet() %>% addTiles() %>% addPolygons(data=adm, weight = 3, fillColor = col)
Run Code Online (Sandbox Code Playgroud)
但想象一下,我想要一个将在稍后进行onClick操作的传单地图.
基于SuperZip,我需要有类似的东西
map <- createLeafletMap(session, "map")
session$onFlushed(once=TRUE, function() {
map$addPolygon(...)
})
Run Code Online (Sandbox Code Playgroud)
但是,没有addPolygon方法,我很困惑它将如何工作SpartialPolygons.
我也试过转换geoJSON,类似于https://ropensci.org/blog/2013/10/23/style-geojson-polygon/或这个SO问题,但正在做
polys <- fromJSON(<json data file>)
map <- createLeafletMap(session, "map")
session$onFlushed(once=TRUE, function() {
map$geoJson(polys)
})
Run Code Online (Sandbox Code Playgroud)
给我一个错误
Error in func() : attempt to apply non-function
Run Code Online (Sandbox Code Playgroud)
有办法吗?或者我做错了什么?
我想墨西哥城市的shape文件转换成topojson和使用d3.js使用本教程中显示它http://bost.ocks.org/mike/map/#converting-data.我设法转换它但我无法显示它.任何帮助将不胜感激.
这是我目前的工作流程:
1)下载并解压缩shapefile
wget http://mapserver.inegi.org.mx/MGN/mgm2010v5_0a.zip
unzip mgm2010v5_0a.zip
Run Code Online (Sandbox Code Playgroud)
2)转换为JSON,重新投影到lat-long并对shapefile进行子集化
ogr2ogr -f GeoJSON -t_srs EPSG:4326 -where "CVE_ENT IN ('09')" df.json Municipios_2010_5A.shp
Run Code Online (Sandbox Code Playgroud)
3)转换为topojson
topojson --id-property OID -p name=OID -p name -o df2.json df.json
Run Code Online (Sandbox Code Playgroud)
4)并创建HTML代码
<!DOCTYPE html>
<meta charset="utf-8">
<style>
/* CSS goes here. */
</style>
<body>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script src="http://d3js.org/topojson.v1.min.js"></script>
<script>
var width = 960,
height = 1160;
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
d3.json("df2.json", function(error, df2) {
svg.append("path")
.datum(topojson.feature(df2, df2.objects.df))
.attr("d", d3.geo.path().projection(d3.geo.mercator()));
});
</script>
Run Code Online (Sandbox Code Playgroud)
如果我运行html我只是得到一个空白页面.关于我可能做错什么的任何想法?
我已经readShapePoly在maptools包中读取了shapefile ,但无法读取同一个文件readOGR.我希望有人可以帮助我阅读shapefile readOGR.
我orcounty.shp从这里下载了文件:http://geography.uoregon.edu/geogr/topics/maps.htm
我也下载了相关文件:orcounty.shx,orcounty.sbx,orcounty.sbn,和orcounty.dbf,并把所有五个文件的文件夹中:c:/users/mark w miller/gis_in_R/shapefile_example/
以下代码读取shapefile并显示一些属性:
library(maptools)
setwd('c:/users/mark w miller/gis_in_R/shapefile_example/')
# Oregon county census data (polygons)
orcounty.poly <- readShapePoly('orcounty.shp', proj4string=CRS("+proj=longlat"))
orcounty.line <- readShapeLines('orcounty.shp', proj4string=CRS("+proj=longlat"))
# see projection
summary(orcounty.poly)
Object of class SpatialPolygonsDataFrame
Coordinates:
min max
x -124.55840 -116.46944
y 41.98779 46.23626
Is projected: FALSE
proj4string : [+proj=longlat]
Data attributes:
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用以下代码读取相同的shapefile时,我收到一个错误:
library(rgdal)
# read shapefile
oregon.map <- readOGR(dsn="c:/users/mark …Run Code Online (Sandbox Code Playgroud) 我在R中使用shapefile ,一个是point.shp,另一个是polygon.shp.现在,我想将点与多边形相交,这意味着多边形中的所有值都应该附加到point.shp的表中.
我在包sp中尝试了overlay()和spRbind,但没有做我期望他们做的事情.
谁能给我一个提示?
我们有一个使用WCF服务的C#.Net应用程序.该应用程序部署在Windows服务应用程序下的生产服务器中.该模块的一部分负责创建形状文件((*.shp,*.dbf),用于工作人员今天工作的较小区域,并将其发送到PDA.
要编写形状文件,我们使用第三方DLL NetTopologySuite
GisSharpBlog.NetTopologySuite.IO.ShapefileWriter
Run Code Online (Sandbox Code Playgroud)
这也是在C#中.(我不确定它引用的任何dll是否使用非托管代码.) 系统可能会工作一段时间再说一个星期.突然间我们得到一个例外说法
Attempted to read or write protected memory.
This is often an indication that other memory is corrupt.
Run Code Online (Sandbox Code Playgroud)
从Write方法,我们将几何集合写入形状文件.
sfw.Write(FileName, new GeometryCollection(gc.ToArray()));
Run Code Online (Sandbox Code Playgroud)
(GeometryCollection也来自第三方dll,GeoAPI.dll)
此错误会导致整个服务失效并使其无法正常运行.然后我们只是重新启动服务并尝试再次运行相同的数据,它将再工作一周,直到它再次崩溃.它只发生在生产中和随机时间.我们无法找到问题的原因.
许多论坛都认为这可能是因为某些非托管代码中的内存泄漏.但我们找不到哪一个.
我们也准备重写创建新形状文件的部分.请帮我解决这个问题.如果需要更多详细信息,请与我们联系.提前致谢.
在阅读了很多帖子和网站后,我找不到如何从我的lon-lat数据表创建多边形shapefile.我想创建像这样的地图.

我的csv数据文件包含地中海1000点的经度,纬度和属性.我想按属性创建shapefile子集化数据,然后用ggplot2绘制geom_polygon,填充属性.
我试过这个R代码(来自/sf/answers/1792571371/)但没有成功
library("sp")
library("rgdal")
clust1 <- subset(datos, datos$cluster == 1)
coords<-cbind(clust1$longitud,clust1$latitud)
sp_poly <- SpatialPolygons(list(Polygons(list(Polygon(coords)), ID=1)))
sp_poly_df <- SpatialPolygonsDataFrame(sp_poly, data=data.frame(ID=1))
writeOGR(sp_poly_df, "chull", layer="chull", driver="ESRI Shapefile")
ggplot() + geom_polygon(data=sp_poly_df, aes(x=long, y=lat, group=group))
Run Code Online (Sandbox Code Playgroud)
这产生的输出显然不是shapefile/polygon
plot(sp_poly_df) 给出这个:
我是否需要先使用ggplot强化sp_poly_df以进行绘图?
如何创建shapefile或SpatialPolygon?我想将所有具有相同聚类属性的点合并,以映射数据集中的不同区域/多边形,然后使用聚类值填充多边形.也许这样,创建多边形/ shapefile,不是生成这种类型的地图的最佳方法.
也尝试了,geom_map但它不是我想要的:
ggplot() +
geom_point(data=datos, aes(x=longitud, y=latitud, color=id),
alpha=1, na.rm=TRUE) + scale_size(range=c(1,12)) +
scale_color_identity() +
labs(title= "med cluster",
x="Longitude", y= "Latitude") + coord_map()
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助
使用的数据:
> dput(dato)
structure(list(longitud = c(18.875, 19.125, 19.375, 18.375, 18.625,
18.875, 19.125, 19.375, 19.625, …Run Code Online (Sandbox Code Playgroud)