首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GeoPandas标签面

GeoPandas标签面
EN

Stack Overflow用户
提问于 2016-08-11 22:28:36
回答 2查看 23.6K关注 0票数 32

给定可用的形状文件,here:我想标记地图中的每个多边形(县)。使用GeoPandas可以做到这一点吗?

代码语言:javascript
复制
import geopandas as gpd
import matplotlib.pyplot as plt
%matplotlib inline

shpfile=<Path to unzipped .shp file referenced and linked above>
c=gpd.read_file(shpfile)
c=c.loc[c['GEOID'].isin(['26161','26093','26049','26091','26075','26125','26163','26099','26115','26065'])]
c.plot()

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-12 01:17:44

c['geometry']是由shapely.geometry.polygon.Polygon对象组成的一系列。可以通过检查以下内容来验证这一点

代码语言:javascript
复制
In [23]: type(c.ix[23, 'geometry'])
Out[23]: shapely.geometry.polygon.Polygon

Shapely docs中,有一个representative_point()方法,它

返回一个计算成本较低的点,该点保证位于几何对象内。

听起来非常适合需要标记多边形对象的情况!然后,可以为geopandas dataframe创建一个新列,'coords'如下所示

代码语言:javascript
复制
c['coords'] = c['geometry'].apply(lambda x: x.representative_point().coords[:])
c['coords'] = [coords[0] for coords in c['coords']]

现在,您已经拥有了与每个面对象(每个县)相关的一组坐标,您可以通过迭代数据框来注记地块

代码语言:javascript
复制
c.plot()
for idx, row in c.iterrows():
    plt.annotate(s=row['NAME'], xy=row['coords'],
                 horizontalalignment='center')

票数 65
EN

Stack Overflow用户

发布于 2017-02-14 05:48:18

不需要循环,以下是如何使用apply进行注释:

代码语言:javascript
复制
ax = df.plot()
df.apply(lambda x: ax.annotate(text=x['NAME'], xy=x.geometry.centroid.coords[0], ha='center'), axis=1);
票数 63
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38899190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档