第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

連接兩個數(shù)據(jù)集,都帶有點

連接兩個數(shù)據(jù)集,都帶有點

肥皂起泡泡 2021-11-16 16:03:26
我有兩個帶點的 csv 文件。一個學校數(shù)據(jù)集(緯度、經(jīng)度和學校名稱)和一個帶有房屋坐標(緯度、經(jīng)度和houseid)的數(shù)據(jù)集。我想列出距離學校 500 米范圍內(nèi)的所有房屋。我真的不知道如何在 Python 中與 geopandas 進行空間連接。有人可以幫幫我嗎?schools.csv56.039484;14.164114;Parkskolan56.029687;14.159337;Centralskolanhouses.csv56.039240;14.165066;156.039008;14.166709;256.038608;14.169420;3
查看完整描述

1 回答

?
慕少森

TA貢獻2019條經(jīng)驗 獲得超9個贊

獲得解決方案的主要步驟:

  1. 將 2 個數(shù)據(jù)文件讀入數(shù)據(jù)幀

  2. 設置 CRS('epsg:4326') 并從 (lat,long) 為兩個數(shù)據(jù)幀創(chuàng)建點幾何

  3. 對于schools數(shù)據(jù)幀,將 CRS 轉(zhuǎn)換為 UTMzone 33N

  4. schools數(shù)據(jù)幀上做緩沖(半徑 = 500m)

  5. schools數(shù)據(jù)幀上,執(zhí)行并將 500m 緩沖區(qū)設置為新的geometry

  6. 在公共 CRS之間housesschools中進行適當?shù)目臻g連接

  7. houses_joined數(shù)據(jù)框中獲取結果

這是工作代碼:

import pandas as pd

import geopandas as gpd

from shapely.geometry import Point, Polygon


# School data

# -----------

# read `schools.csv`, data are in (lat,long); 'epsg:4326'

#

# lat;lon;school_name

# 56.039484;14.164114;Parkskolan

# 56.029687;14.159337;Centralskolan

df_schools = pd.read_csv('schools.csv', na_values=['NaN'], sep=';')


# create Point geometry objects from (lon,lat)

sch_geom = [Point(xy) for xy in zip(df_schools.lon, df_schools.lat)]

# set initial coordinate ref system, and geometry column to the dataframe

gdf_schools = gpd.GeoDataFrame(df_schools, crs={'init': 'epsg:4326'}, geometry=sch_geom)


# convert CRS from (lat,long) to UTMzone 33N

# and get new dataframe: gdf_schools_utm33N

gdf_schools_utm33N = gdf_schools.to_crs(crs="+proj=utm +zone=33 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")

# Note: crs="..." can be replaced by epsg=32633


# do buffering, radius: 500m

gdf_schools_utm33N['buffer_geometry'] = gdf_schools_utm33N.geometry.buffer(500)


# rename `geometry` -> `original_geometry`; `buffer_geometry` -> geometry

# .. and set column `geometry` as the default geometry data of the geodataframe.

gdf_schools_utm33N = gdf_schools_utm33N.rename(

    columns={'geometry':'original_geometry', 'buffer_geometry':'geometry'}).set_geometry('geometry')


# Houses data

# -----------

# read `houses.csv`, data are in (lat,long); 'epsg:4326'


# lat;lon;houseid

# 56.039240;14.165066;1

# 56.039008;14.166709;2

# 56.038608;14.169420;3

# 56.046108;14.171420;4


df_houses = pd.read_csv('houses.csv', na_values=['NaN'], sep=';')

# I add the 4th house that is too far away from all schools

# The 4th house: 56.046108  14.171420   4


# create Point geometry for the houses, and init CRS

hs_geom = [Point(xy) for xy in zip(df_houses.lon, df_houses.lat)]

gdf_houses = gpd.GeoDataFrame(df_houses, crs={'init': 'epsg:4326'}, geometry=hs_geom)


# options: plot the schools' buffers and all the houses

ax = gdf_schools_utm33N.plot(color='lightgray', edgecolor='green', alpha=0.5)

gdf_houses.to_crs(epsg=32633).plot(ax=ax, color='red')


# ******* Spatial Join *****************

# houses data frame needs CRS conversion

hss = gdf_houses.to_crs(epsg=32633)

# do spatial join of houses(points) ~ schools(circles of 500m radius)

houses_joined = gpd.sjoin(hss, gdf_schools_utm33N, op='within', how='inner')

# print out the successful joined rows (house_id, school_names)


# this prints house_id + school_name 

houses_joined[['houseid','school_name']]


# Output: house_id, school_name

# 1    Parkskolan

# 2    Parkskolan

# 3    Parkskolan

結果圖:

http://img1.sycdn.imooc.com//619365ed0001df5503570383.jpg

查看完整回答
反對 回復 2021-11-16
  • 1 回答
  • 0 關注
  • 194 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號