質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
QGIS

QGISは、オープンソースの地理情報システムです。無料でありながら、GISに必要な地理空間情報の作成・編集・可視化・解析といった多くの機能を備えています。さらに、無料のプラグインで機能追加を行うことも可能です。

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

pythonのGeoPaundsを用いたGISデータ(ポイントとライン)の最近傍探索の方法

DaiconMT
DaiconMT

総合スコア1

QGIS

QGISは、オープンソースの地理情報システムです。無料でありながら、GISに必要な地理空間情報の作成・編集・可視化・解析といった多くの機能を備えています。さらに、無料のプラグインで機能追加を行うことも可能です。

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1回答

0リアクション

0クリップ

181閲覧

投稿2022/07/26 04:23

前提

pythonでGISデータ処理を行えるGeoPandasを検証しています(google colaboratoryの環境下)。
下記のQGISの操作をGeoPandasを用いて行いたいと考えています。

・最寄りの対象地物までの距離算出および対象地物の指定属性抽出(点と線)
>QGISでの操作:ベクタ解析>最寄りハブの距離を使用(計測単位メートル)

参考として、下記のURLに実装したい機能のスクリプトが載っていたのですが、スクリプトをほぼそのまま記述してもitertoolsでエラーが起きてしまいます。

URL:https://qatop.pythonwood.com/gis/ask/15562081/

まだpythonもGeoPandasも触り始めたばかりで知識は乏しいです。
エラー解決方法や別の方法を教えていただけると幸甚でございます。

よろしくお願いいたします。

実現したいこと

pythonでGISデータ(ポイントとライン)の最近傍探索

発生している問題・エラーメッセージ

TypeError Traceback (most recent call last) <ipython-input-15-2cb0121b196f> in <module>() 38 columns=['Place', 'geometry']) 39 ---> 40 c = ckdnearest(gpd1, gpd2) <ipython-input-15-2cb0121b196f> in ckdnearest(gdfA, gdfB, gdfB_cols) 18 B = [np.array(geom.coords) for geom in gdfB.geometry.to_list()] 19 B_ix = tuple(itertools.chain.from_iterable( ---> 20 (itertools.repeat(i, x) for i, x in enumerate(list(map(len, B)))))) 21 B = np.concatenate(B) 22 ckd_tree = cKDTree(B) TypeError: 'module' object is not callable

該当のソースコード

python

!apt install gdal-bin python-gdal python3-gdal # Install rtree - Geopandas requirment !apt install python3-rtree # Install Geopandas !#pip install git+git://github.com/geopandas/geopandas.git # Install Folium for Geographic data visualization # !pip install folium !pip install plotly-express !pip install --upgrade plotly !pip install matplotlib-scalebar # Use EE in Python !pip install pygeos #geopandasよりも先 !conda install pygeos #geopandasよりも先 !pip install geemap !pip install ipygee !pip install geopandas from google.colab import drive drive.mount('/content/drive') import numpy as np import os from shapely.geometry import Point import matplotlib import matplotlib.pyplot as plt import folium #import plotly_express as px from datetime import datetime import geemap from ipygee import* import itertools from operator import itemgetter import geopandas as gpd import numpy as np import pandas as pd from scipy.spatial import cKDTree from shapely.geometry import Point, LineString #点と線の2つのジオデータフレームから最近傍探索を求める関数 def ckdnearest(gdfA, gdfB, gdfB_cols=['Place']): A = np.concatenate( [np.array(geom.coords) for geom in gdfA.geometry.to_list()]) B = [np.array(geom.coords) for geom in gdfB.geometry.to_list()] B_ix = tuple(itertools.chain.from_iterable( [itertools.repeat(i, x) for i, x in enumerate(list(map(len, B)))])) B = np.concatenate(B) ckd_tree = cKDTree(B) dist, idx = ckd_tree.query(A, k=1) idx = itemgetter(*idx)(B_ix) gdf = pd.concat( [gdfA, gdfB.loc[idx, gdfB_cols].reset_index(drop=True), pd.Series(dist, name='dist')], axis=1) return gdf 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', LineString([Point(100, 0), Point(100, 1)])], ['Shops', LineString([Point(101, 0), Point(101, 1), Point(102, 3)])], ['Home', LineString([Point(101, 0), Point(102, 1)])]], columns=['Place', 'geometry']) c = ckdnearest(gpd1, gpd2)

試したこと

上述

補足情報(FW/ツールのバージョンなど)

python3

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

QGIS

QGISは、オープンソースの地理情報システムです。無料でありながら、GISに必要な地理空間情報の作成・編集・可視化・解析といった多くの機能を備えています。さらに、無料のプラグインで機能追加を行うことも可能です。

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。