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

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

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

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

Google Colaboratory

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

Python

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

Q&A

解決済

1回答

1450閲覧

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

DaiconMT

総合スコア1

QGIS

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

Google Colaboratory

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

Python

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

0グッド

0クリップ

投稿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

1!apt install gdal-bin python-gdal python3-gdal 2# Install rtree - Geopandas requirment 3!apt install python3-rtree 4# Install Geopandas 5!#pip install git+git://github.com/geopandas/geopandas.git 6# Install Folium for Geographic data visualization 7# !pip install folium 8!pip install plotly-express 9!pip install --upgrade plotly 10!pip install matplotlib-scalebar 11# Use EE in Python 12!pip install pygeos #geopandasよりも先 13!conda install pygeos #geopandasよりも先 14!pip install geemap 15!pip install ipygee 16!pip install geopandas 17 18from google.colab import drive 19drive.mount('/content/drive') 20 21 22import numpy as np 23import os 24from shapely.geometry import Point 25import matplotlib 26import matplotlib.pyplot as plt 27import folium 28#import plotly_express as px 29from datetime import datetime 30import geemap 31from ipygee import* 32 33 34import itertools 35from operator import itemgetter 36 37import geopandas as gpd 38import numpy as np 39import pandas as pd 40 41from scipy.spatial import cKDTree 42from shapely.geometry import Point, LineString 43 44 45#点と線の2つのジオデータフレームから最近傍探索を求める関数 46def ckdnearest(gdfA, gdfB, gdfB_cols=['Place']): 47 A = np.concatenate( 48 [np.array(geom.coords) for geom in gdfA.geometry.to_list()]) 49 B = [np.array(geom.coords) for geom in gdfB.geometry.to_list()] 50 B_ix = tuple(itertools.chain.from_iterable( 51 [itertools.repeat(i, x) for i, x in enumerate(list(map(len, B)))])) 52 B = np.concatenate(B) 53 ckd_tree = cKDTree(B) 54 dist, idx = ckd_tree.query(A, k=1) 55 idx = itemgetter(*idx)(B_ix) 56 gdf = pd.concat( 57 [gdfA, gdfB.loc[idx, gdfB_cols].reset_index(drop=True), 58 pd.Series(dist, name='dist')], axis=1) 59 return gdf 60 61gpd1 = gpd.GeoDataFrame([['John', 1, Point(1, 1)], 62 ['Smith', 1, Point(2, 2)], 63 ['Soap', 1, Point(0, 2)]], 64 columns=['Name', 'ID', 'geometry']) 65gpd2 = gpd.GeoDataFrame([['Work', LineString([Point(100, 0), Point(100, 1)])], 66 ['Shops', LineString([Point(101, 0), Point(101, 1), Point(102, 3)])], 67 ['Home', LineString([Point(101, 0), Point(102, 1)])]], 68 columns=['Place', 'geometry']) 69 70c = ckdnearest(gpd1, gpd2)

試したこと

上述

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

python3

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

from ipygee import*にてipygeeにはmapというモジュールが存在するため、既存のmapが上書きされて提示エラーが発生しています。
もしこのパッケージが不要であればコメントアウトするか、*を使わずに別名をつけてimportしてください。

投稿2022/07/26 05:23

can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

DaiconMT

2022/07/26 06:11

迅速なご回答ありがとうございます。 解決いたしました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問