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

Shapelyは、地理情報システムに共通の2D平面幾何オブジェクトの構築と分析のためのオープンソースのPythonパッケージです。


2
Pythonでポイントがマルチポリゴン内にあるかどうかを確認する
シェープファイル、フィオナ、ogrなどのライブラリを使用してコードのいくつかの例を試して、ポイント(x、y)がArcMapで作成された(したがって、シェープファイル形式で)マルチポリゴンの境界内にあるかどうかを確認しました。ただし、通常の単一ポリゴンシェープファイルでは問題なく機能しますが、マルチポリゴンではうまく機能しない例もあります。私が試したスニペットの一部を以下に示します。 # First example using shapefile and shapely: from shapely.geometry import Polygon, Point, MultiPolygon import shapefile polygon = shapefile.Reader('shapefile.shp') polygon = polygon.shapes() shpfilePoints = [] for shape in polygon: shpfilePoints = shape.points polygon = shpfilePoints poly = Polygon(poly) point = Point(x, y) # point in polygon test if polygon.contains(point): print …

5
WindowsでのGEOSおよびShapelyのインストール
Windows 64ビットコンピューターにShapelyをインストールしようとすると、GEOSライブラリが機能しません。 これまでのところ、GDALをインストールしたOSGeo4Wインストーラーを実行しました(geosライブラリーはそのパッケージに含まれていると思います)。その後、チェックして、C:\OSGeo4W\binディレクトリにgeos_c.dll がありますが、いくつかの構成手順を逃したか、ライブラリが機能しません。 Shapelyが動作する必要があるため、pip install shapelyGDALをインストールした後も実行しましたが、明らかに動作しました(GEOSのCライブラリが見つかりませんでしたが)。 私のコードではShapelyをインポートできますが、使用しようとすると、"geos.dll"見つからないというエラーが表示されます。
12 qgis  python  gdal  shapely 

2
シェープファイルMultiPolygonsからShapely MultiPolygonsを作成する
私はフィオナを使用してシェープファイルを読んでいます: with fiona.open('data/boroughs/boroughs_n.shp') as source: mpolys = [p for p in source] candidate = polys[0]['geometry'] これは私に座標のリストのリストを含む辞書を提供し、「MultiPolygon」と入力しますが、座標データを使用してShapely MultiPolygonを作成する方法はわかりません a sequence of exterior ring and hole list tuples: [((a1, ..., aM), [(b1, ..., bN), ...]), ...]. FionaとShapelyを使用してこれを行う「正しい」方法はありますか?
12 python  shapely  fiona 

4
shapelyの使用:ポリゴンとマルチポリゴン間の変換
[編集:これに対する解決策は、OGRを使用してシェープファイルを読み取ることでした。geographikaの例を参照してください。] ESRIシェープファイルでは、ポリゴンとマルチポリゴンを区別しません。さらに、内部の穴と外部のリングの間に明確な区別はありません(特定のポリゴンの「利き手」以外)。 したがって、シェープファイルを読み込んだ後、リングを記述する座標シーケンスのリストがありますが、いくつかのより集中的な処理なしでは、これらのリングのどれが外部リング、内部穴、または追加のポリゴンであるかを区別できません。 のためと思わスッキリポリゴンとMultiPolygonのコンストラクタs」は、外部と内部リング間の明確な区別がなければならないので、どのように私は明らかに指定された内部と外部リングで、分離ポリゴンの順序集合にリングの不明瞭リストから移動する必要があります? 要約すると、ポリゴンリングのリストはあるが、どのリングが内部の穴であるか、または個別のポリゴンであるかわからない場合、指定された内部の穴を持つ個別のポリゴンにどのように分類すればよいですか? 私はPythonで実装でき、数百のポリゴンを1分以内に処理するために使用できる簡単なアルゴリズムソリューションを探しています。そして、私はこれをして多数の交差を実行します。

3
Pythonで複数のポリゴンの交差点を効率的に取得する
複数のポリゴンの交差点を取得したいです。Pythonのshapelyパッケージを使用すると、intersection関数を使用して2つのポリゴンの交差を見つけることができます。複数のポリゴンの交差を取得するための同様の効率的な機能はありますか? これが私の意味を理解するためのコードスニペットです。 from shapely.geometry import Point coord1 = ( 0,0 ) point1 = Point(coord1) circle1 = point1.buffer(1) coord2 = ( 1,1 ) point2 = Point(coord2) circle2 = point2.buffer(1) coord3 = ( 1,0 ) point3 = Point(coord3) circle3 = point3.buffer(1) 2つの円の交点はで見つけることができますcircle1.intersection(circle2)。で3つすべての円の交差点を見つけることができますcircle1.intersection(circle2).intersection(circle3)。ただし、このアプローチは、より多くのコードを必要とするため、多数のポリゴンに対応できません。任意の数のポリゴンを取り、それらの交差を返す関数が欲しいです。

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
shapelyでpostgisジオメトリを読み取る
私はipythonノートブックでgeopandasとshapelyを使用して小規模なワークフローを実行し、シェープファイルから、時にはpostgis(より高価な処理が実行される)から大量の地理空間データを引き出します。 次に、を使用してpostgisテーブルをpythonにプルします。sqlalchemy途中でジオメトリをWKTに変換し、次のようにします。 sql = """ SELECT ST_AsText(ST_Transform(the_geom,4326)) as newgeom,* FROM public.parcels2010_small limit 5; """ parcels = pd.read_sql(sql, engine) parcels +----+---------------------------------------------------+---------------------------------------------------+-----------+-------------+ | id | newgeom | the_geom | parcel_id | osm_node_id | +----+---------------------------------------------------+---------------------------------------------------+-----------+-------------+ | 0 | MULTIPOLYGON(((-122.991093691444 38.4878691106... | 01060000209C0E00000100000001030000000100000097... | 1805792 | 66237 | +----+---------------------------------------------------+---------------------------------------------------+-----------+-------------+ | 1 | MULTIPOLYGON(((-122.444576448624 37.7346386006... …

2
2つのポイントからShapely LineStringを作成する方法
2つのポイントがあり、そこから直線LineStringオブジェクトを作成する場合: from shapely.geometry import Point, LineString A = Point(0,0) B = Point(1,1) 状態に関するShapelyマニュアルLineString: Pointインスタンスのシーケンスは、有効なコンストラクターパラメーターではありません。A LineStringはポイントで記述されますが、Pointインスタンスで構成されていません。 だから、2つのポイントAとBがあるAB場合、現在の「最良の」推測よりも短い/良い/簡単な線を作成する方法があります... AB = LineString(tuple(A.coords) + tuple(B.coords)) ...かなり複雑に見えます。もっと簡単な方法はありますか? 更新 本日リリースされたShapely 1.3.2では、マニュアルの上記の記述は正しくありません。だからこれから AB = LineString([A, B]) 動作します!
11 python  shapely 

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)) 本当 本当 …

2
シェイプ長さ属性の単位とは何ですか?
私は形を使ってポリラインの長さの非常に簡単な計算をしています: from shapely.geometry import LineString ... xy_list = [map(float,e) for e in xy_intm] line = LineString(xy_list) s = '%s,%s,%s' % (fr,to,line.length) 私の座標はWGS84です。shapelyの長さ属性に関する情報が見つからないようです。長さ属性の単位は何ですか?kmまたはメートルに変換する簡単な方法はありますか?
11 shapely  length  units 


1
Shapely MultiPolygonからPolygonへの変換:この手法は常に機能するとは限りません
外部座標を取得するために、形の良いMultiPolygonをPolygonに変換する必要があります。私はそれをこのようにします: if poly.geometry.type == 'Polygon': x, y = poly.geometry.exterior.xy elif poly.geometry.type == 'MultiPolygon': allparts = [p.buffer(0) for p in poly.geometry] poly.geometry = shapely.ops.cascaded_union(allparts) x, y = poly.geometry.exterior.xy # here happens the error これは頻繁に成功しますが、次のエラーが発生するため、Polygonが明らかにMultiPolygonのままである場合もあります。 AttributeError: 'MultiPolygon' object has no attribute 'exterior' ただし、MultiPolygonのすべての部分がポリゴンであり、それ自体がMultiPolygonではないことを確認しました。 >>>>[p.type for p in poly.geometry] ['Polygon', 'Polygon'] これがなぜ起こるのか、そしてそれを修正する方法はありますか? ポリゴンの穴にできますか?私はこのように見えます:

2
国際日付変更線を横切るポリゴン[-180 .. + 180経度]
衛星軌道帯用のポリゴンを生成しようとしています。これまでのところ、[lat、long]で各帯のエッジを表す2つの線を生成する方法があります。一部のスワスは国際日付変更線と交差しているため、次のように囲みます。 私はこれを解決することができましたogr2ogr -wrapdateline: ogr2ogr -wrapdateline -f "ESRI Shapefile" test.shp orbits.shp おそらく行を分割します 次に、両方の線の内側にポリゴンを生成できるようにしたいと思います。したがって、たとえば、スワスの1つのエッジが日付ラインと交差する場合、次のように、ポリゴンが反対側に現れたときに塗りつぶします。 タスクを何度も繰り返す必要があるため、自動化された方法が必要です。できればpythonで行を生成します。以下は、これらの行を含む2つのシェープファイルです。wraparound ; 固定日付

3
多角形の「グリーディ」なクリッピングライン
一連のポリライン(下の画像の黒い線)をポリゴンの外側の境界にクリップしたいと思います。ポリゴン内のボイドはすべて無視する必要があります。私の理想的な出力は黄色の破線です。最初の線はまっすぐな場合とそうでない場合があります。画像は単純化された例ですが、実際にはポリゴンははるかに複雑で、数百の線があります。凸包は機能しないと思います(ただし、私は間違っているかもしれません)。私はarcgis、qgis、arcpy、shapelyなどのソリューションを利用できます。必要に応じて、他のオプションを利用できるようにすることで、コーディングをPythonで行うことができます。Arcgisは、同僚がツールを共有しやすくするためにも望ましいですが、必須ではありません。 私が今考えることができる最良のことは、個々の線を多角形と交差させ、すべての境界交差で一連の点を作成することです。線の始点までの距離でポイントを並べ替えます。最も遠くて最も近い(FAC)ポイントは、ポリゴンの外側の境界になります。次に、FACポイントを使用して元の線から適切な頂点を選択し、適切な点から黄色の破線を作成します。動作するはずですが、必要以上に複雑に見えます。 いくつかの追加の考え: ラインは線形であり、ポイント間の単純な距離計算が機能するため、線形参照は必要ありません。 これは、あるポイントでラインを分割するツールがあったとしても、それを見つけることができなければ、arcpyで簡単です。 誰でも考えましたか?

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