GeoSeries 屬性與方法(二)

在 Python 視覺化地理空間資料

Mary van Valkenburg

Data Science Program Manager, Nashville Software School

GeoSeries.centroid

  • 回傳 GeoSeries 中每個幾何的中心點
# 第一個多邊形的質心
print(districts.geometry.centroid[0])
Point(-87.256 36.193)

帶有質心的多邊形

在 Python 視覺化地理空間資料

學區的質心

GeoSeries.centroid
# 列印學區的前 5 列
print(school_districts.head())
first_name  last_name  district  geometry
Sharon      Gentry        1      (POLYGON ((-86.771 36.383...
Jill        Speering      3      (POLYGON ((-86.753 36.404...
Jo Ann      Brannon       2      (POLYGON ((-86.766 36.083...
Anna        Shepherd      4      (POLYGON ((-86.580 36.209...
Amy         Frogge        9      (POLYGON ((-86.972 36.208...
在 Python 視覺化地理空間資料

學區的質心

# 由質心建立 'center` 欄位
school_districts['center'] = school_districts.geometry.centroid

# 建立含學區與中心點的 GeoDataFrame part = ['district', 'center'] school_district_centers = school_districts[part] school_district_centers.head(3)
district         center               
1                POINT (-86.86086595994405 36.2628221811899)    
3                POINT (-86.72361421487962 36.28515517790142)    
2                POINT (-86.70156420691957 36.03021153030475)
在 Python 視覺化地理空間資料

GeoSeries.distance()

  • GeoSeries.distance(other):回傳到 other 的最短距離
# red_pt 到質心的距離
cen = districts.geometry.centroid[0]
print(red_pt.distance(other = cen))
24.273

含紅點與黑色質心點的多邊形

在 Python 視覺化地理空間資料

兩點之間的距離

GeoSeries.distance(other)
district_one = school_districts.loc[school_districts.district == '1']
district_one.head()
first_name  last_name  district center                  geometry    
Sharon      Gentry     1        POINT (-86.860 36.262)  (POLYGON ((-86.771...
在 Python 視覺化地理空間資料

兩點之間的距離

schools.head(3)
name                 lat     lng
AZ Kelley Elem       36.021  -86.658
Alex Green Elem      36.252  -86.832
Amqui Elem           36.27   -86.703

# 在 schools 建立 geometry
schools['geometry']=gpd.points_from_xy(schools.lng, schools.lat)

# 建立 schools 的 GeoDataFrame
school_geo=gpd.GeoDataFrame(schools,crs = district_one.crs,
                            geometry = schools.geometry)
在 Python 視覺化地理空間資料

兩點之間的距離

# 空間連接:位於第 1 學區內的學校
schools_in_dist1 = gpd.sjoin(schools_geo, district_one, predicate = 'within')
schools_in_dist1.shape
(30, 8)
在 Python 視覺化地理空間資料
# 匯入 pprint 以美化字典輸出
import pprint

distances = {}
for row in schools_in_dist1.iterrows():
    vals = row[1]
    key = vals['name']
    ctr = vals['center']
    distances[key] = vals['geometry'].distance(ctr)
pprint.pprint(distances)
{'Alex Green Elementary': 0.030287172719682773,
 'Bellshire Elementary': 0.0988045140909651,
 'Brick Church College Prep': 0.08961013862715599,
 'Buena Vista Elementary': 0.10570511270825833,
 'Cockrill Elementary': 0.1077685612196105....
在 Python 視覺化地理空間資料

一起來練習吧!

在 Python 視覺化地理空間資料

Preparing Video For Download...