回答:
私も同様の問題を抱えていたので、QGISプラグインを開発しました。これは、公式のQGISプラグインリポジトリで利用可能になり、QGISメニューで見つけることができます。
http://plugins.qgis.org/plugins/disconnected-islands/
このプラグインは、ポリラインレイヤーで実行され、接続されたリンクの道路(またはレールなど)ネットワークグラフを構築します。次に、相互に接続されているが、分離リンクまたはフローティングリンクには接続されていない接続サブグラフを分析します。サブグラフのグループIDを含む追加の属性を作成します。これを使用して、分類されたスタイルでレイヤーをスタイル設定したり、選択範囲にズームしたりできます。切断されたリンクは、修正または削除できます。
ソースコードは次の場所から分岐できます:https : //github.com/AfriGIS-South-Africa/disconnected-islands
私のデータセットには約200万のリンクがあり、55 GBのRAMを使用して15分未満で分析されました。
このQGIS Pythonスクリプトを使用して、何にも接続されていないラインを検出できます。
from qgis.utils import iface
layer = iface.mapCanvas().currentLayer() # Selected layer
featureList = list( layer.getFeatures() ) # Gets all features
allFeatures = { feature.id(): feature for feature in featureList }
# Spatial indexing
spatialIdx = QgsSpatialIndex()
map( spatialIdx.insertFeature, featureList )
resList = [] # ids of features not connected to anything
for f in featureList:
# List of potentially connected features from spatial indexing
ids = spatialIdx.intersects( f.geometry().boundingBox() )
hasNeighbor = False
for id in ids:
ifeature = allFeatures[id]
if ifeature.id() == f.id():
continue
# Checks if f is really intersecting with ifeature
if f.geometry().intersects(ifeature.geometry()):
hasNeighbor = True
break # Exit current for loop
if (not hasNeighbor) and (not f.id() in resList):
resList.append( f.id() )
print resList
これはマルチパートラインでは機能しないことに注意してください。もっと速くなるとは思いません...