タグ付けされた質問 「geopandas」

Pythonで地理空間データを簡単に操作できるようにするオープンソースプロジェクト。

2
Pandas DataFrameをGeoDataFrameに変換する
これは十分に簡単な質問のように思えますが、空間結合のためにパンダのDataFrameをGeoDataFrameに変換する方法がわかりません。 以下は私のデータがどのように見えるかの例ですdf.head(): Date/Time Lat Lon ID 0 4/1/2014 0:11:00 40.7690 -73.9549 140 1 4/1/2014 0:17:00 40.7267 -74.0345 NaN 実際、このデータフレームはCSVから作成されているため、CSVをGeoDataFrameとして直接読み込む方が簡単であれば、それでも問題ありません。
42 csv  geopandas  pandas 

5
GeoPandas:他のデータフレームで最も近いポイントを見つける
2つのジオデータフレームがあります。 import geopandas as gpd from shapely.geometry import Point gpd1 = gpd.GeoDataFrame([['John',1,Point(1,1)],['Smith',1,Point(2,2)],['Soap',1,Point(0,2)]],columns=['Name','ID','geometry']) gpd2 = gpd.GeoDataFrame([['Work',Point(0,1.1)],['Shops',Point(2.5,2)],['Home',Point(1,1.1)]],columns=['Place','geometry']) そして、gpd1の各行について、gpd2の最も近いポイントの名前を見つけたいです。 desired_output = Name ID geometry Nearest 0 John 1 POINT (1 1) Home 1 Smith 1 POINT (2 2) Shops 2 Soap 1 POINT (0 2) Work 私はラムダ関数を使用してこれを機能させようとしています: gpd1['Nearest'] = gpd1.apply(lambda row: min_dist(row.geometry,gpd2)['Place'] , …

2
ジオパンダを使用してポリゴンエリアを取得しますか?
与えられたgeopandas GeoDataFrameポリゴンのシリーズを含む、私は私のリストにある各機能のキロ平方の領域を取得したいと思います。 これはかなり一般的な問題であり、過去に通常の提案された解決策を使用するようになっているshapelyとpyproj(例えば、直接こことここ)。 これを純粋に行う方法はありgeopandasますか?

3
Python(shapely、fiona)を使用して属性に基づいてポリゴンを溶解しますか?
私は、QGISが機能を「溶解」するのと基本的に同じことを行う関数を作成しようとしています。私はそれは非常に簡単だと思ったが、明らかにそうではない。だから、私が集めたものから、フィオナとshapelyの使用がここでの最良の選択肢であるはずです。ベクターファイルをいじり始めたばかりなので、この世界は私にとってもPythonにとっても新しいものです。 これらの例では、http: //tinyurl.com/odfbanuでここに設立された郡のシェープファイルを使用して います :今の私の最善の方法は、に基づいて、以下の通りであるhttps://sgillies.net/2009/01/27/a-more-perfect-union-continued.html。それはうまく機能し、52の状態のリストをShapelyジオメトリとして取得します。この部分を行うためのより簡単な方法がある場合は、お気軽にコメントしてください。 from osgeo import ogr from shapely.wkb import loads from numpy import asarray from shapely.ops import cascaded_union ds = ogr.Open('counties.shp') layer = ds.GetLayer(0) #create a list of unique states identifier to be able #to loop through them later STATEFP_list = [] for i in range(0 , …


1
Shapelyのスナップ(GEOスナップ)が期待どおりに機能しないのはなぜですか?
Shapely / Geopandasを使用して2本の線を互いにスナップしようとしていますが、スナップの結果は非常に奇妙です。私は試した : import geopandas as gpd from shapely.geometry import * from shapely.ops import snap lines1 = gpd.GeoDataFrame.from_file('lines1.shp') lines1 = lines1.to_crs({'init': 'epsg:2227'}) lines2 = gpd.GeoDataFrame.from_file('lines2.shp') lines2 = lines2.to_crs({'init': 'epsg:2227'}) res = lines1 lines2_union = lines2.geometry.unary_union res.geometry = res.geometry.apply(lambda x: snap(x, lines2_union, 14)) res.to_file('result.shp', driver="ESRI Shapefile") そして、この結果を得ました: lines1 = 赤い線 …

2
GeoPandas DataframeをPostGISテーブルに追加しますか?
シンプルなGeoPandasデータフレームがあります。 このGeoDataframeをPostGISテーブルにアップロードしたいと思います。PostGIS拡張機能を使用したデータベースのセットアップは既にありますが、このDataframeをテーブルとして追加できないようです。 私は次を試しました: engine = <> meta = MetaData(engine) eld_test = Table('eld_test', meta, Column('id', Integer, primary_key=True), Column('key_comb_drvr', Text), Column('geometry', Geometry('Point', srid=4326))) eld_test.create(engine) conn = engine.connect() conn.execute(eld_test.insert(), df.to_dict('records'))

1
Shapely Polygonsの交差点へのフィーチャのカウント
私が持っているgeopandas GeoDataFrame見栄えの何百も含むPolygonとMultiPolygonジオメトリを。ポリゴンは多くの場所で重なります。重複する数のカウントを含む新しいジオメトリを作成したいと思います。このようなもの: 誰もこれにアプローチする方法についてのアイデアを持っていますか?道すら見えない。 最終的には、いくつかのポリゴンが単独で2の価値があるように、ポリゴンに重みを付けることができるようになりたいと思います。これをshapelyのZフィールドで行うといいかもしれません。 余談:私はこれらのライブラリのどれにも特に縛られていませんが、まさに私が終わったところです。これらのジオメトリの座標は実際にはピクセル座標です—別の画像にオーバーレイするラスターを作成することにつまずいています。ランダムなものをインストールできないかもしれないクラウドサーバーなどにこのようなものを展開できるようにしたいので、フットプリントをできる限り小さくしたいと思います。


1
GeoPandas to_file()は座標系なしでGeoDataFrameを保存します
私は持っています GeoPandas 0.2.1 py27_0 fiona 1.7.0 np110py27_1 Python 2.7.10 Anaconda 2-4.1.1-Windows-x86環境にインストールされます。GeoDataFrame入力データセットを読み取ってデータを操作して構築できますが、出力データセットを保存しても座標系は保持されません。 import geopandas as gpd world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres')) world.to_file(driver='ESRI Shapefile',filename=r'C:\GIS\Temp\world_out.shp') world_out.shp特徴およびソースシェープファイルのスキーマを含むが、座標ないシステムが定義されていません(<Unknown>)。world_out.prjファイルが0キロバイトで、何が含まれていません。 out = gpd.read_file(r'C:\GIS\Temp\world_out.shp') print out.crs >>> {} 純粋なフィオナを使用してこの操作を実行するようにテストしましたが、正常に機能し、crs情報を保持します。 import fiona datasrc_path = r'C:\Program Files (x86)\ArcGIS\Desktop10.4\TemplateData\TemplateData.gdb' with fiona.drivers(): with fiona.open(datasrc_path,layer='cities') as source: meta = source.meta meta['driver'] = 'ESRI Shapefile' meta['layer'] …

3
ジオパンダの空間結合が非常に遅い
以下のコードを使用して、数百万のGPSポイントの国(および場合によっては州)を見つけています。現在、コードは1ポイントあたり約1秒かかりますが、これは非常に遅いです。シェープファイルは6 MBです。 ジオパンダは空間結合にrtreeを使用しており、信じられないほど効率的であると読みましたが、これはここでは機能しないようです。私は何を間違えていますか?私は毎秒1000ポイントかそこらを望んでいました。 シェープファイルとcsvはここからダウンロードできます(5MB):https ://www.dropbox.com/s/gdkxtpqupj0sidm/SpatialJoin.zip ? dl=0 import pandas as pd import geopandas as gpd from geopandas import GeoDataFrame, read_file from geopandas.tools import sjoin from shapely.geometry import Point, mapping,shape import time #parameters shapefile="K:/.../Shapefiles/Used/World.shp" df=pd.read_csv("K:/.../output2.csv",index_col=None,nrows=20)# Limit to 20 rows for testing if __name__=="__main__": start=time.time() df['geometry'] = df.apply(lambda z: Point(z.Longitude, z.Latitude), axis=1) …

5
生データをジオパンダに読み込む
生データをa geopandas GeoDataFrame、la a に読み込むことはできpandas DataFrameますか? たとえば、次の作品: import pandas as pd import requests data = requests.get("https://data.cityofnewyork.us/api/geospatial/arq3-7z49?method=export&format=GeoJSON") pd.read_json(io.BytesIO(r.content)) 以下は行いません: import geopandas as gpd import requests data = requests.get("https://data.cityofnewyork.us/api/geospatial/arq3-7z49?method=export&format=GeoJSON") gpd.read_file(io.BytesIO(r.content)) つまり、最初にディスクにデータを保存せずに、メモリにある地理空間データを読み取ることはできますか?

1
Python:条件に基づいてラインストリングを分割
各頂点/ポイントに関連付けられたいくつかのデータを持つ一連のラインストリングのジオパンダデータフレームがあります。 Point_x = (Lat, Lon, Time, ID, Data1, Data2, Data3) ポイントは、IDに基づいてラインストリングに変換され、時間順に並べられます。 ある条件が満たされた時点で、ラインストリングを分割したい。現在、ポイント間の距離が特定の値よりも大きい場合です。将来的には、データフィールドの機能が何らかの値になる可能性があります。たとえば、速度が5 kphを超えるとラインストリングを分割します。 現在の問題は、トラックの一部が重複したIDを持つポイントから形成されているため、ラインストリングが非常に長い距離で前後にジャンプし、これらのラインを分割するためのしきい値が必要なことです。 これまたはライブラリ/メソッドを構造化する正しい方法に関するアイデアはありますか? データフレームには15,000を超えるトラックがあり、トラックごとに多くのポイントが含まれているため、効率が良いでしょう。 トラックDFの例を次に示します。 ID geometry 204235000 LINESTRING (37.62001 -28.99535, 37.62015 -28.9... 205400000 LINESTRING (3.807816666666666 -18.083181666666... 207138000 LINESTRING (22.73206 -34.97915833333333, 22.73... 209016000 LINESTRING (8.447673333333331 -23.522783333333... これがポイントDFのサンプルです。Datetime、Point(Lon、Lat)、Speed、Sizeなどを含む18列があります。 Index Heading Latitude Longitude ID 20 92.8 -35.946802 13.089695 210725000 21 …

2
ジオパンダの境界ボックスでフィルタリングしますか?
EPSG:4326にgeopandasデータフレームがあり、特定の境界ボックス内にあるすべての行で構成される新しいデータフレームを作成します。 最初に、気になるバウンディングボックスを取得します(これは実際には別のデータフレームのバウンディングボックスです)。 print df_sussex.total_bounds [ -1.57239292 50.57467674 0.14528384 51.27465152] 次に、その境界ボックスのみで構成されるデータフレームを作成します。 pts = gpd.GeoDataFrame(df_sussex.total_bounds) そして最後に、その境界ボックスと交差するすべての機能を取得しようとします。 sac_sussex = gpd.overlay(pts, df_sac, how='intersection') しかし、これは私に与えますAttributeError: No geometry data set yet (expected in column 'geometry'。 何が悪いのですか?
11 python  geopandas 

1
ジオパンダラインポリゴンの交差
複数のラインが2つの異なるジオデータフレームのポリゴンと交差する場所を見つけようとしています。 from shapely.geometry import Polygon, LineString import geopandas as gpd polygon = Polygon([(0, 0), (1, 0), (1, 1), (0, 1), (0, 0)]) line1 = LineString([(0.5, 0.5), (0.7, 0.7)]) line2 = LineString([(0.9, 0.9), (0.2, 0.6)]) poly_gdf = gpd.GeoDataFrame(geometry=[polygon]) line_gdf = gpd.GeoDataFrame(geometry=[line1, line2]) これは、上記のジオデータフレームは次のようになります(1つにはポリゴンがあり、もう1つには2つの線があります)。両方の線がポリゴンと交差しているように見えます。 ただし、交差出力は非常に混乱します。 print(line_gdf.intersects(poly_gdf)) 0真 1誤り print(line1.intersects(polygon)) print(line2.intersects(polygon)) 本当 本当 …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.