<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          geopandas 0.10版本重磅新特性一覽

          共 3579字,需瀏覽 8分鐘

           ·

          2021-10-30 18:25

          添加微信號"CNFeffery"加入技術交流群

          ?

          本文示例代碼及文件已上傳至我的Github倉庫https://github.com/CNFeffery/DataScienceStudyNotes

          ?

          1 簡介

          就在前不久,我們非常熟悉的Python地理空間分析庫geopandas更新到了0.10.0版本,而伴隨最近一段時間其針對新版本的一些潛在bug進行的修復,寫作本文時最新的正式版本為0.10.2。此次0.10.x版本為我們帶來了諸多令人興奮的新功能新特性,本文就將帶大家一睹其中一些比較重要的內(nèi)容??。

          2 geopandas 0.10版本重要新特性一覽

          如果你已經(jīng)安裝了舊版本的geopandas,那么推薦執(zhí)行下列命令進行geopandas的更新:

          conda?update?geopandas?-c?https://mirrors.sjtug.sjtu.edu.cn/anaconda/cloud/conda-forge?-y

          而如果你還沒有安裝geopandas,那么下面的安裝方式是最穩(wěn)妥的:

          conda?install?geopandas=0.10.2?-c?https://mirrors.sjtug.sjtu.edu.cn/anaconda/cloud/conda-forge?-y
          pip?uninstall?rtree?-y
          pip?install?rtree?-i?https://pypi.douban.com/simple/
          pip?install?pygeos?-i?https://pypi.douban.com/simple/

          安裝/更新完成后,檢驗一下geopandas是否被正確安裝:

          下面我們就來看看這次版本更新中有哪些重要新變動吧~

          2.1 新增空間最近連接方法sjoin_nearest()

          我們都知道利用geopandas中的sjoin(),可以完成基于多種空間拓撲關系的「空間連接」操作。

          但有些時候我們需要判斷的并不是左右兩表中矢量列相交、包含等直接的「拓撲關系」,而是左右兩表矢量列之間「距離至多xx米」這類的空間距離關系判斷,這在舊版本的geopandas中,通常可以左右兩邊分別做「緩沖區(qū)」后進行「常規(guī)空間連接」來實現(xiàn)。

          而這次新增的sjoin_nearest()就可以支持我們開展上述分析計算功能,它的主要參數(shù)有:

          • 「left_df」:連接對應的左GeoDataFrame
          • 「right_df」:連接對應的右GeoDataFrame
          • 「how」:設置連接方式,可選的有'left''right''inner',默認為'inner'
          • 「max_distance」:重要參數(shù),用于設置最大搜索距離閾值,當矢量間的距離小于此閾值時才會進行連接
          • 「lsuffix」:設置左表重名字段后綴文字,默認為'left'
          • 「rsuffix」:設置右表重名字段后綴文字,默認為'right'
          • 「distance_col」:設置連接結果表中記錄對應矢量間距離的字段名稱,默認不設置時不會在結果表中添加距離信息

          下面我們來通過一個簡單的例子來體驗這個功能:

          import?geopandas?as?gpd
          from?shapely.geometry?import?Point

          #?構造示例點要素表1
          gdf1?=?gpd.GeoDataFrame(
          ????{
          ????????'id1':?list('abc'),
          ????????'geometry':?[
          ????????????Point(0,?0),
          ????????????Point(1,?0),
          ????????????Point(-1,?0)
          ????????]
          ????}
          )

          #?構造示例點要素表2
          gdf2?=?gpd.GeoDataFrame(
          ????{
          ????????'id2':?list('def'),
          ????????'geometry':?[
          ????????????Point(0.4,?0),
          ????????????Point(1.2,?0),
          ????????????Point(-1.3,?0)
          ????????]
          ????}
          )

          ax?=?gdf1.plot(color='red')
          ax?=?gdf2.plot(color='green',?ax=ax)
          ax.axis('equal');

          顏色即用來區(qū)分我們的左右表對應矢量點位置,下面直接運用sjoin_nearest()進行空間最近連接,設置的距離閾值為0.35:

          (
          ????gpd
          ????.sjoin_nearest(gdf1,?gdf2,?max_distance=0.35,?distance_col='對應距離')
          )

          非常的方便快捷:

          2.2 新增交互地圖式數(shù)據(jù)探索方法explore()

          很多人都知道著名的在線地圖可視化組件leafletPython中有對應的庫folium,而在這次新版本中,geopandasGeoDataFrameGeoSeries對象新增交互式地圖可視化方法explore(),你可以理解為交互式版本的plot()方法。

          其參數(shù)設置較為豐富,我之后會單獨寫一篇文章來為大家介紹,下面展示一個簡單易懂的例子(注意,如果你的矢量數(shù)據(jù)非常大,請「不要」用此方法繪圖,在線地圖方式適合較小的矢量數(shù)據(jù)):

          provinces?=?gpd.read_file('省.shp')
          provinces.head(3)
          ...
          provinces.explore(
          ????column='類型',?
          ????zoom_start=4
          )

          2.3 sjoin()、sjoin_nearest()、overlay()和clip()亦可作為GeoDataFrame的方法來使用

          在以前的版本中,我們只能使用gpd.XXX()的方式來使用sjoin()overlay()clip()等方法,而在這次新版本更新中,我們可以像pandas里的merge()join()那樣作為方法使用,好處就是可以更好的書寫鏈式運算過程啦??!以上文介紹的sjoin_nearest()為例,只需向sjoin_nearest()方法中傳入右表即可:

          (
          ????gdf1
          ????.sjoin_nearest(gdf2,?
          ???????????????????max_distance=0.35,?
          ???????????????????distance_col='對應距離')
          )

          2.4 GeoSeries新增批量XY轉(zhuǎn)點方法from_xy()

          新版本中為GeoSeries對象新增了from_xy()方法來快速實現(xiàn)坐標轉(zhuǎn)點,下面與gpd.points_from_xy()的效果進行對比:

          gpd.points_from_xy(x=range(10),?y=range(10))
          ...
          gpd.GeoSeries.from_xy(x=range(10),?y=range(10))

          2.5 to_file()方法在driver參數(shù)缺省時可自動識別導出文件類型

          在新版本中,若未在to_file()中指定driver參數(shù),geopandas會自動根據(jù)文件后綴名來自動推斷要導出的矢量文件類型:

          import?os

          gdf1.to_file('test.shp')

          gdf1.to_file('test.geojson')

          [file?for?file?in?os.listdir()?if?'test.'?in?file]

          2.6 支持對矢量數(shù)據(jù)自動推斷合適的橫軸墨卡托坐標參考系

          其實這個特性在0.9版本中就已加入,但是還有一些小問題,而新版本中這個功能更加完善,效果如下:

          2.7 sjoin()中的op參數(shù)改名為predicate

          為了讓參數(shù)名更加的貼切,在以前版本sjoin()中用于設置拓撲關系的參數(shù)op在這次新版本中被改名為predicate,大家在使用時要留意:


          大家在了解到這些新功能和變動后,在使用新版geopandas時,如果遇到未知bug,歡迎在https://github.com/geopandas/geopandas/issues及時提交說明,一起幫助geopandas變得更加好用和完善??。

          以上就是本文的全部內(nèi)容,歡迎在評論區(qū)與我進行討論~

          加入知識星球【我們談論數(shù)據(jù)科學】

          400+小伙伴一起學習!








          · 推薦閱讀?·

          利用Conda嘗鮮Python 3.10

          新一代數(shù)據(jù)科學ide平臺DataSpell提前發(fā)行版體驗

          教你使用Python連接Wind金融數(shù)據(jù)接口


          瀏覽 82
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  蜜桃久久久久久久久久 | 丁香婷婷色五月激情综合 | 亚洲日韩国产AV无码无码精品 | 日韩操操操 | 国产一级搞鸡 |