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

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

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

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

5580閲覧

geopandas(地理空間情報処理)でpointがpolygon内に存在するか判定(point.within(polygon))できない

mu-ro

総合スコア20

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2021/07/31 06:22

困っていること

以下のプログラムを実行して,座標点を表すpointが領域を表すpolygonに存在しているか判別したいです.
print(point.within(polygon))
で判別が可能で,polygon内にpointが存在する場合はTrueを返却するのですが,Falseを返却されます.

今回使用したpoint座標はpolygonの領域内に存在しています.

import pandas as pd import numpy as np import os import geopandas as gpd 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* from shapely.ops import cascaded_union from geopy.distance import geodesic from shapely.geometry.polygon import Polygon import shapely # ルートディレクトリ ROOT = './' # プローブデータ読み込み probe = gpd.read_file(f'{ROOT}/routemap.geojson') print(probe) # name _iconUrl 駐車 標高 _color _weight _opacity _dashArray geometry # 0 足利公園 https://map.jpn.org/icon/954025.png 8台 None None NaN NaN None POINT (139.43479 36.33788) # 1 第2号墳 https://map.jpn.org/icon/952014.png None None None NaN NaN None POINT (139.43520 36.33723) # 2 水道山 https://map.jpn.org/icon/952015.png None 93m None NaN NaN None POINT (139.43447 36.33903) # 3 稲荷神社 https://map.jpn.org/icon/951005.png None None None NaN NaN None POINT (139.42873 36.34150) # 4 石碑 https://map.jpn.org/icon/951005.png None None None NaN NaN None POINT (139.42888 36.34283) # 5 立岩山 https://map.jpn.org/icon/952015.png None 96m None NaN NaN None POINT (139.42783 36.34201) # 6 愛宕山 https://map.jpn.org/icon/952015.png None 81m None NaN NaN None POINT (139.42365 36.34519) # 7 船頭山 https://map.jpn.org/icon/952015.png None None None NaN NaN None POINT (139.42609 36.34853) # 8 天神様 https://map.jpn.org/icon/951005.png None None None NaN NaN None POINT (139.42671 36.34927) # 9 琴平山 https://map.jpn.org/icon/951005.png None None None NaN NaN None POINT (139.42558 36.35259) # 10 湯殿山 https://map.jpn.org/icon/952015.png None 160m None NaN NaN None POINT (139.42648 36.35433) # 11 山神社 https://map.jpn.org/icon/951005.png None None None NaN NaN None POINT (139.42979 36.35878) # 12 野山 https://map.jpn.org/icon/952015.png None 297m None NaN NaN None POINT (139.42641 36.36264) # 13 障子岩 https://map.jpn.org/icon/952014.png None None None NaN NaN None POINT (139.43211 36.36822) # 14 大岩山 https://map.jpn.org/icon/952015.png None 417m None NaN NaN None POINT (139.43793 36.37214) # 15 展望岩場 https://map.jpn.org/icon/952014.png None None None NaN NaN None POINT (139.44706 36.36501) # 16 雷電神社分岐 https://map.jpn.org/icon/951005.png None None None NaN NaN None POINT (139.44806 36.35903) # 17 両崖山 https://map.jpn.org/icon/952015.png None 251m None NaN NaN None POINT (139.44800 36.35354) # 18 天狗山 https://map.jpn.org/icon/952015.png None 259m None NaN NaN None POINT (139.44116 36.35377) # 19 須永山 https://map.jpn.org/icon/952015.png None 154m None NaN NaN None POINT (139.43774 36.34343) # 20 大岩山(往路) None None None #0000ff 3.0 0.5 3,6 LINESTRING (139.43479 36.33788, 139.43514 36.3... # 21 大岩山(復路) None None None #ff0000 3.0 0.5 3,6 LINESTRING (139.43793 36.37215, 139.43800 36.3... # 任意の点が領域(ポリゴン)内に存在するか判別 # 任意座標 p = [36.3646321899427, 139.44395774894275] point = Point(p) # プローブデータをポリゴン化 pol = [] for i in range(len(probe)): poly = probe.iloc[i].geometry # print(poly) for i in [p for p in poly.coords]: pol.append(i) polygon = Polygon(pol) print(polygon) # POLYGON ((139.434786 36.337881, 139.435203 36.337233, 139.434467 36.339033, 139.428731 36.341503, 139.428881 36.342828, 139.427831 36.342014, 139.423647 36.345186, 139.426089 36.348533, 139.426706 36.349272, 139.425583 36.352594, 139.426481 36.354331, 139.429794 36.358783, 139.426406 36.362642, 139.432106 36.368222, 139.437928 36.372144, 139.447061 36.365014, 139.448056 36.359033, 139.448003 36.353542, 139.441158 36.353775, 139.437736 36.343428, 139.434785 36.337881, 139.43514 36.337194, 139.434296 36.338578, 139.434473 36.339043, 139.434331 36.338583, 139.433249 36.338294, 139.432788 36.338317, 139.432713 36.339203, 139.432851 36.339868, 139.432695 36.339957, 139.429384 36.340212, 139.42913 36.340533, 139.428746 36.341572, 139.428564 36.341564, 139.428617 36.341774, 139.428053 36.341648, 139.42888 36.342827, 139.428419 36.342251, 139.4278 36.341971, 139.428083 36.341973, 139.428061 36.341849, 139.428213 36.341827, 139.42805 36.341644, 139.428539 36.341783, 139.428515 36.341185, 139.427906 36.340964, 139.426927 36.340852, 139.426283 36.340902, 139.421937 36.343432, 139.422395 36.344666, 139.423808 36.345255, 139.423671 36.345283, 139.423903 36.345242, 139.42511 36.346605, 139.424813 36.346779, 139.424617 36.34649, 139.425094 36.34621, 139.424244 36.345539, 139.423917 36.345622, 139.42345 36.346277, 139.423288 36.34633, 139.423846 36.346796, 139.424998 36.348129, 139.425729 36.347995, 139.425966 36.347559, 139.425869 36.347153, 139.425561 36.346879, 139.426456 36.346743, 139.42684 36.348684, 139.426268 36.348653, 139.426113 36.348515, 139.426106 36.348644, 139.426324 36.348788, 139.426321 36.348644, 139.426897 36.348646, 139.426976 36.349121, 139.426705 36.349271, 139.426924 36.349168, 139.427086 36.349517, 139.42664 36.350714, 139.426024 36.350763, 139.426098 36.35132, 139.425839 36.352254, 139.425432 36.352772, 139.425684 36.353721, 139.426127 36.354179, 139.426569 36.354362, 139.426473 36.354331, 139.426495 36.3549, 139.426672 36.355307, 139.426632 36.35596, 139.427366 36.356978, 139.427405 36.357295, 139.428104 36.357905, 139.429059 36.358218, 139.429344 36.358115, 139.429999 36.358512, 139.430123 36.358797, 139.430011 36.358847, 139.428896 36.358509, 139.42719 36.358265, 139.42692 36.358534, 139.426516 36.358673, 139.426416 36.35901, 139.426042 36.359144, 139.425521 36.359798, 139.425332 36.3604, 139.426006 36.361575, 139.426498 36.362063, 139.426364 36.362721, 139.426474 36.362771, 139.42634 36.362748, 139.426464 36.363532, 139.426843 36.364517, 139.426681 36.364937, 139.427023 36.365867, 139.427425 36.366018, 139.428337 36.366025, 139.429172 36.366318, 139.43013 36.367265, 139.430596 36.367391, 139.430813 36.36768, 139.431725 36.367983, 139.431986 36.368188, 139.432463 36.368309, 139.432932 36.368184, 139.433537 36.368952, 139.434319 36.369609, 139.434474 36.369924, 139.434939 36.370219, 139.435642 36.370381, 139.435928 36.370616, 139.4369 36.370862, 139.437435 36.371554, 139.438116 36.371722, 139.437942 36.372087, 139.437927 36.372145, 139.438003 36.372298, 139.438194 36.371666, 139.438471 36.37143, 139.438957 36.371339, 139.439332 36.37141, 139.439654 36.371312, 139.439614 36.371192, 139.440109 36.371173, 139.440738 36.370661, 139.441225 36.370026, 139.441459 36.369243, 139.442432 36.368309, 139.443289 36.367808, 139.443734 36.367026, 139.444571 36.366436, 139.445434 36.366393, 139.445956 36.366107, 139.447061 36.365014, 139.44771 36.363717, 139.447656 36.36304, 139.44733 36.36266, 139.447288 36.36224, 139.446795 36.362301, 139.446978 36.361787, 139.447108 36.360426, 139.447311 36.360086, 139.447439 36.360093, 139.448056 36.359033, 139.447324 36.357889, 139.447391 36.357497, 139.447086 36.356524, 139.446636 36.356069, 139.44738 36.35546, 139.447593 36.355413, 139.447768 36.355132, 139.44781 36.353815, 139.448214 36.353375, 139.447815 36.353169, 139.447127 36.35309, 139.446789 36.352728, 139.445894 36.353084, 139.445635 36.353373, 139.444582 36.35377, 139.44353 36.353649, 139.443212 36.35382, 139.442895 36.353772, 139.442481 36.353974, 139.441158 36.353785, 139.440411 36.353075, 139.439586 36.352635, 139.439096 36.351735, 139.439125 36.351038, 139.438521 36.349661, 139.438563 36.348815, 139.438769 36.348525, 139.438774 36.347918, 139.439322 36.347084, 139.439053 36.34659, 139.438884 36.345215, 139.438167 36.344511, 139.437388 36.342849, 139.437579 36.341707, 139.436978 36.340702, 139.437671 36.339638, 139.437861 36.339589, 139.437199 36.339139, 139.435611 36.338706, 139.434787 36.338048, 139.434786 36.337881)) # pointがpolygon内に存在するか判定 print(point.within(polygon)) # False

どなたか分かる方ご教示頂けますと幸いです.

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

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

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

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

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

ppaul

2021/07/31 06:34

p = [139.44395774894275, 36.3646321899427] ではないのですか?
mu-ro

2021/07/31 07:43

ありがとうございます!! 座標の緯度経度が読み込み時と,point.within(polygon)で逆になっていたようです!! p = [36.3646321899427, 139.44395774894275] で正解で, 読み込んだデータを緯度経度逆にしたらできました!!!
quickquip

2021/07/31 08:10 編集

質問のコードはもともと正しく動くコードだったということですか?
mu-ro

2021/07/31 08:16

修正しました. p = [36.3646321899427, 139.44395774894275] point = Point(p) はそのままで良かったんですけど, # プローブデータをポリゴン化 pol = [] for i in range(len(probe)): poly = probe.iloc[i].geometry for j in [p for p in poly.coords]: # 緯度経度を逆にする pol.append((j[1],j[0])) polygon = Polygon(pol) このように変更することで,読み込みデータの緯度経度を逆にしました!
quickquip

2021/07/31 09:12

このコードがあったら「読み込んだデータを緯度経度逆にしたら」の意図が伝わったと思います。 この欄ではなくて回答に書くといいかと。
guest

回答1

0

自己解決

座標の緯度経度が読み込み時と,point.within(polygon)で逆になっていたようです!!

p = [36.3646321899427, 139.44395774894275]
で正解で,
読み込んだデータを緯度経度逆にしたらできました!!!

p = [36.3646321899427, 139.44395774894275]
point = Point(p)

はそのままで良かったんですけど,

プローブデータをポリゴン化

pol = []
for i in range(len(probe)):
poly = probe.iloc[i].geometry
for j in [p for p in poly.coords]:
# 緯度経度を逆にする
pol.append((j[1],j[0]))
polygon = Polygon(pol)

このように変更することで,読み込みデータの緯度経度を逆にしました!

投稿2021/07/31 07:43

編集2021/07/31 16:13
mu-ro

総合スコア20

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問