我想知道在objective-C中是否存在一个操作shapefile(读/写/编辑)的类?
我在kml文件上找到了很多东西,但没有关于shp文件的东西,但绝对想要避免转换文件格式(shp-> kml)的需要.
谢谢
我有一些非常大的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) 我正试图用非洲背景地图绘制研究地点的积分.我可以独立创建这两个,但我很难将它们叠加在彼此之上.
我使用的非洲地图是来自maplibrary.org的Esri shapefile.可以从我的保管箱https://www.dropbox.com/s/etqdw3nky52czv4/Africa%20map.zip获取.我在文本文件中有点,也可以从我的投递箱中获得. https://www.dropbox.com/s/scvymytjsr5pvaf/SPM-437-22Nov12.txt.他们指的是疟疾寄生虫的分子耐药性研究.我想绘制它们,使颜色是具有抗药性遗传标记的寄生虫的比例,并且大小是测试的寄生虫的数量.
独立绘制点数:
qplot(Longitude, Latitude, data = d.spm.437, colour = Frc437, size = Tot437)
Run Code Online (Sandbox Code Playgroud)
绘制非洲地图:
library(maptools)
africa = readShapePoly("Africa.shp")
africa.map = fortify(africa, region="COUNTRY")
qplot(long, lat, data = africa.map, geom="path", group=group)
Run Code Online (Sandbox Code Playgroud)
任何有关将这两者放在一起同时保留点数显示的帮助将不胜感激.
我有一个显示澳大利亚偏远地区的形状文件,来自澳大利亚统计局:
http://www.abs.gov.au/AUSSTATS/abs@.nsf/DetailsPage/1270.0.55.005July%202011?OpenDocument
在同一个URL是PDF"ASGS Remoteness Structure Edition 2011 PDF Maps" - 我试图从这个PDF文档重现第一张地图.
我已经在shapefile中读到并向data插槽添加了颜色信息:
ra <- readShapeSpatial("RA_2011_AUST", delete_null_obj = TRUE)
ra@data$COLOUR <- "#FFFFFF"
ra@data$COLOUR[(as.numeric(as.character(ra@data$RA_CODE11)) %% 10) == 0] <- "#006837"
ra@data$COLOUR[(as.numeric(as.character(ra@data$RA_CODE11)) %% 10) == 1] <- "#31A354"
ra@data$COLOUR[(as.numeric(as.character(ra@data$RA_CODE11)) %% 10) == 2] <- "#78C679"
ra@data$COLOUR[(as.numeric(as.character(ra@data$RA_CODE11)) %% 10) == 3] <- "#C2E699"
ra@data$COLOUR[(as.numeric(as.character(ra@data$RA_CODE11)) %% 10) == 4] <- "#FFFFCC"
Run Code Online (Sandbox Code Playgroud)
我唯一要做的就是绘制地图!这是我被困的地方......
ra@polygons是一个包含35个多边形的列表,每个多边形都有一个槽ID,它是数据帧的索引ra@data.所以我要做的就是告诉我plot()找到颜色ra@data$COLOUR[ID].嗯,不太好.35个多边形("多边形"类)中的每一个都有自己的多边形列表("Polygon"类); 总共有6902个多边形!!!
我的理解plot()是,我必须以与绘制多边形相同的顺序传递颜色矢量.因此,我相信我必须创建一个长度为6902的向量,每个元素保存相关多边形的颜色值.我到目前为止怎么样?
如果按顺序绘制多边形,那将很容易,但它们不是.35个多边形中的每一个都有一个plotOrder整数向量的槽,因此颜色向量可能必须按照这些向量中的每个向量的顺序排序.
在这一点上,这一切似乎有点过于复杂.我完全偏离了这里吗?
谢谢你的建议!
我已经在GIS堆栈交换中发布了这个问题,但它没有看到太多的流量.
我是一名GIS用户,几年来一直使用R进行统计,我很高兴看到很多新的GIS功能被发布(光栅,shapefile,rgdal等).
我在R中做了很多数据库和表操作,因此能够从shapefile中添加和删除属性是一个强大的潜力.
我希望我只是错过了那里的东西,但我似乎无法找到一个很好的方法来添加或删除shapefile属性表中的属性.
Overflow中的任何人都可以回复我的GIS帖子吗?或者我可以被告知如何将我的列表属性表放入数据帧并返回以替换当前属性表?
自我原帖后的一些进展:
这是在弄清楚如何采取我的属性表appart(.dbf),添加东西,现在我试图把它重新组合起来替换原来的dbf.
>libary(raster); library(rgdal); library(shapefiles)
>shp<-shapefile(Shape) # D.C. area airport polygons
>summary(shp) #Shapefile properties
Object of class SpatialPointsDataFrame
Coordinates:
min max
coords.x1 281314.2 337904.7
coords.x2 4288867.0 4313507.0
Is projected: TRUE
proj4string :
[+proj=utm +zone=18 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0]
Number of points: 4
Data attributes:
ObjectID LOCID NAME FIELD STATE STATE_FIPS ACAIS TOT_ENP TYPE
Min. :134.0 Length:4 Length:4 Length:4 Length:4 Length:4 Length:4 Min. : 271 Length:4
1st Qu.:242.8 Class :character …Run Code Online (Sandbox Code Playgroud) 鉴于对应于欧洲国家的SHP文件,以及......
给定对应法国的定义区域:
West : 005° 48' W
East : 010° E
North : 051° 30' N
South : 041° N
Run Code Online (Sandbox Code Playgroud)
如何只获得与我定义的区域相交的点/几何与gdal?所以我的作物确实是一种真正的作物,它只保留必要的几何形状.强烈偏好gdal,ogr或控制台的解决方案.
我可以使用什么算法来生成加权图表,如下所示:
?
我可以使用R,.NET库和PostGIS中的代码生成shapefile图.但是,我找不到用于查找用于生成这些扭曲的shapefile图的算法的实现的搜索项.不一定只想绘制世界地图,因此必须能够使用任意shapefile.
我正在通过Matplotlib在美国和加拿大东海岸的底图上绘制数据.除了基础层(填充的等高线图),我使用Matplotlib的readshapefile工具在数据顶部覆盖了这个焦点区域的shapefile.

我想知道如何掩盖shapefile之外的所有网格数据.我显然可以通过Matplotlib做一个maskocean命令,但我仍然留在圣劳伦斯以西的填充轮廓.现在有人怎么做?我在线搜索没有太多运气.
def make_map(lon,lat,param):
fig, ax = plt.subplots()
ax.axis('off')
x1 = -83.
x2 = -57.
y1 = 37.
y2 = 50.
projection='merc'
resolution='h'
m = Basemap(projection=projection, llcrnrlat=y1, urcrnrlat=y2, llcrnrlon=x1,
urcrnrlon=x2, resolution=resolution)
x,y = m((lon-360.),lat)
m.ax = ax
my_cmap = cm.get_cmap('coolwarm')
pp = m.contourf(x, y, param, 30, cmap=my_cmap, extend='both')
m.drawmapscale(-67, 39.5, -70, 43.5, 500, fontsize=8, barstyle='fancy')
return fig, m, x, y
def drawstates(ax, shapefile='../StateProv_UTMrp'):
shp = m.readshapefile(shapefile, 'states',zorder = 1, drawbounds=True)
for nshape, seg in enumerate(m.states):
poly = Polygon(seg, facecolor='w',alpha=0.0, edgecolor='k') …Run Code Online (Sandbox Code Playgroud) 我试图将shapefile读入GeoDataFrame.
通常我只是这样做,它的工作原理:
import pandas as pd
import geopandas as gpd
from shapely.geometry import Point
df = gpd.read_file("wild_fires/nbac_2016_r2_20170707_1114.shp")
Run Code Online (Sandbox Code Playgroud)
但这一次它给了我错误: b'Recode from ANSI 1252 to UTF-8 failed with the error: "Invalid argument".'
完整错误:
---------------------------------------------------------------------------
CPLE_AppDefinedError Traceback (most recent call last)
<ipython-input-14-adcad0275d30> in <module>()
----> 1 df_wildfires_2016 = gpd.read_file("wild_fires/nbac_2016_r2_20170707_1114.shp")
/usr/local/lib/python3.6/site-packages/geopandas/io/file.py in read_file(filename, **kwargs)
19 """
20 bbox = kwargs.pop('bbox', None)
---> 21 with fiona.open(filename, **kwargs) as f:
22 crs = f.crs
23 if bbox is not None:
/usr/local/lib/python3.6/site-packages/fiona/__init__.py in open(path, mode, driver, schema, …Run Code Online (Sandbox Code Playgroud) 我想在我的地理地图上创建六边形,并希望保留 shapefile/geojson 指定的数字边界。如何使用 uber 的 h3 python 库来做到这一点?
我对 shapefile 或任何其他地理数据结构不熟悉。我对 python 最满意。