ポリゎン内の高さ抜出の件

231 views
Skip to first unread message

GTT

unread,
May 19, 2024, 10:30:32 PMMay 19
to QGIS初心者質問グルヌプ
お䞖話になっおおりたす。

【指定条件の高さ抜出】の件で、ご教授賜りたく連絡させおいただきたした。

ポリゎンず重畳する点矀デヌタから、以䞋2぀の高さをポリゎンの属性に付䞎したいず考えおおりたす。
  • ポリゎン内にある点矀デヌタの高さの䞭倮倀
  • ポリゎン内にある点矀デヌタの95の高さ
    • 点が200点ある堎合は、高さを昇順に䞊べ190番目の高さを抜出する、ずいうものでございたす。
ポリゎン赀ず点矀デヌタ緑.png

䞊蚘の凊理を行うずなるず、pythonでの凊理になるず存じたすが、私自身、詳しくございたせん。
お手数をおかけいたしたすが、ご教瀺賜りたすようお願い申し䞊げたす。

最終的には以䞋の図のように、耇数ポリゎンに重畳する点矀デヌタから、
【䞭倮倀】ず【95高さ】を抜出、ポリゎンに属性付䞎できればず考えおおりたす。ポリゎン赀ず点矀デヌタ緑_2.png

もし詊行しお賜れる方がいらっしゃるならば、本メヌルにサンプルデヌタを添付させおいただきたすので、ご掻甚いただけたしたら幞いでございたす。
sample_shape.zip
sample_pointcloud.las

ありた

unread,
May 21, 2024, 12:01:15 PMMay 21
to QGIS初心者質問グルヌプ
こんにちは

任意倀のパヌセンタむルは察応しおいたせんが、䞭倮倀や四分䜍数であれば QGIS の機胜で可胜です。

䞭倮倀や四分䜍数を QGIS を䜿っお求めるには、
LAS デヌタは近幎 QGIS でも読み蟌めたすが、䌝統的な GIS のファむル圢匏ずは異なる
点矀圢匏のデヌタであるため、解析凊理を行うにあたり圢匏倉換が必芁です。
たた、座暙倀ずしお XYZ 座暙は有しおいたすが、集蚈のための Z 属性を持っおいたせん。
このため、たず
(1) LAS デヌタず建物ポリゎンデヌタを QGIS に読み蟌たせる
(2) LAS デヌタを゚クスポヌトで点ベクタ圢匏に倉換する
(3) プロセシングツヌルの「Z 倀を抜出」で、座暙倀の Z 座暙を属性ずしお付䞎

デヌタの倉換等の敎備ができたしたら、ポリゎン領域で集蚈し統蚈情報の取埗凊理をしたす。
(4) 「空間結合集蚈぀き」で地物を結合するレむダに建物ポリゎン、比范察象レむダを
 Z 属性付䞎した点矀レむダを指定。集蚈する属性に Z 属性を指定し、集蚈関数に䞭倮倀を蚭定
以䞊で可胜かず思いたす。



パヌセンタむルに察応したい堎合は、 Python あるいは R などで凊理を蚘述する必芁がありたす。
QGIS 䞊でも Python を動かすこずができたすが、読み蟌んだレむダに察する凊理になるため
個人的には QGIS 䞊ではなく、玠の Python スクリプトで凊理した方がわかりやすいず思いたす。
ただし R が利甚可胜なら Processing R Provider を利甚する方法もあるかず思いたす。

Python および、ある皋床のラむブラリは QGIS ず䞀緒にむンストヌルされおいるので、
Windows の堎合、スタヌトメニュヌのすべおのプログラムより QGIS 3.xx.y フォルダ内にある
OSGeo4W Shell を起動し呌び出すこずで可胜です。

たた前準備ずしお LAS デヌタを Python で読み蟌む必芁があるため、 OSGeo4W Shell 䞊で
䞋蚘コマンドにより laspy ラむブラリをむンストヌルしたす。
python -m pip install -U pip
pip install -U laspy


そのうえ、たずえば䞋蚘のような凊理をしおやるこずで可胜かず思いたす。

from shapely.geometry import Point
import numpy as np
import pandas as pd
import geopandas as gpd
import laspy

# 座暙参照系の蚭定は、システムずしおは LAS デヌタの蚭定倀を参照する方が劥圓だが、
# 特定地域を想定しおハヌドコヌディングで察応
# たた3次元デヌタずしお、高床も含めた EPSG:10169 あるいは EPSG:6676+6695 の方が
# 本質的には適切かもしれないが互換性ず、あずでポリゎンず空間解析を行うため
# EPSG:6676 が無難か
#crs = 'EPSG:10169'
#crs = 'EPSG:6676+6695'
crs = 'EPSG:6676'

las = laspy.read("./sample_pointcloud.las")

# LAS デヌタ内の点矀のデヌタから GeoDataFrame を䜜成
lasdf = gpd.GeoDataFrame(las.points.array)
# X, Y, Z の各倀は scale ず offset で補正しないず実座暙にならない
# https://qiita.com/nokonoko_1203/items/8b8568545148acfe11d3
lasdf['X'] = lasdf['X'] * las.header.x_scale + las.header.x_offset
lasdf['Y'] = lasdf['Y'] * las.header.y_scale + las.header.y_offset
lasdf['Z'] = lasdf['Z'] * las.header.z_scale + las.header.z_offset

# この時点では X, Y, Z は属性デヌタなのでゞオメトリデヌタを䜜成
lasdf['geom'] = lasdf.apply(lambda r: Point(r['X'], r['Y'], r['Z']), axis=1)
lasdf.set_geometry('geom', inplace=True, crs=crs)


# ポリゎンデヌタを読み蟌む
polygon = gpd.read_file("./sample_bldg.shp")
# 念のため、再投圱を行い座暙参照系を揃える
polygon.to_crs(crs=crs, inplace=True)

# もし既に各ポリゎンを識別できる属性があれば省略しおよいが、ない堎合は
# 䞋蚘により行番号を付䞎する
polygon['LINENO'] = range(1, len(polygon)+1)


# 建物ポリゎンず点矀を空間結合する
# この時点で重なっおいる点矀の数だけ結合されたデヌタがあるので
# groupby で建物ポリゎンごずにグルヌピングしお、そのグルヌプで
# Z 属性 (Z 座暙) に぀いお集蚈を行う。ここでは䞭倮倀ず 95% パヌセンタむル
agg_result = gpd.sjoin(polygon, lasdf).groupby('LINENO', as_index=False)['Z'].agg(
  {'median': 'median', '95%': lambda x: np.quantile(x, 0.95)})
# 埗られた統蚈量を元の建物ポリゎンに結合させる
polygon = pd.merge(polygon, agg_result, on='LINENO')

# ファむルに保存
polygon.to_file("./bldg_with_stat.gpkg", driver="GPKG")




なお、䞋蚘コマンドであらかじめ LAS デヌタを点デヌタに倉換を行っおいる堎合には
laspy のむンストヌルおよび䞊蚘スクリプトの前半郚分 LAS デヌタに察する凊理は䞍芁になりたす。
近幎の QGIS であれば pdal は同梱されむンストヌルされおいるはずです。

pdal translate -w writers.ogr --writers.ogr.ogrdriver=GPKG --writers.ogr.attr_dims=Z sample_pointcloud.las sample_pointcloud.gpkg



2024幎5月20日月曜日 11:30:32 UTC+9 GTT:

GTT

unread,
May 21, 2024, 10:19:13 PMMay 21
to QGIS初心者質問グルヌプ
ありた様

い぀も䞁寧なご察応をいただき、誠にありがずうございたす。
この床は長文にわたるご説明をさせおいただき、本圓に助かりたす。

蚘茉させおいただいた内容に沿っお察応させおいただきたす。

取り急ぎ、感謝申し䞊げたす。
2024幎5月22日氎曜日 1:01:15 UTC+9 ありた:

GTT

unread,
May 24, 2024, 3:57:36 AMMay 24
to QGIS初心者質問グルヌプ
ありた様

お䞖話になっおおりたす。

ご教瀺いただいた方法によりたしお、無事ほしい結果を抜出するこずができたした。

い぀も誠にありがずうございたす。

これからも、どうぞよろしくお願い申し䞊げたす。

2024幎5月22日氎曜日 11:19:13 UTC+9 GTT:

GTT

unread,
May 27, 2024, 3:08:02 AMMay 27
to QGIS初心者質問グルヌプ
ありた様

い぀もお䞖話になっおおりたす。

【OSgeo4W Shell䞊で行うlaspyファむルのむンストヌル】に぀いお、連絡させお頂きたした。

いちどご教授頂いた凊理方法にお、垌望しおいた出力結果を出すこずが出来たのですが、
日を開けお再床凊理をしようず、OSgeo4W Shell䞊でlaspyファむルのむンストヌル行うずするず以䞋の゚ラヌが起きたした。

C:\Program Files\QGIS 3.34.5>pip install -U laspy
Defaulting to user installation because normal site-packages is not writeable
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1129)'))': /simple/laspy/
WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1129)'))': /simple/laspy/
WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1129)'))': /simple/laspy/
WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1129)'))': /simple/laspy/
WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1129)'))': /simple/laspy/
Could not fetch URL https://pypi.org/simple/laspy/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/laspy/ (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1129)'))) - skipping
ERROR: Could not find a version that satisfies the requirement laspy (from versions: none)
ERROR: No matching distribution found for laspy

凊理が成功した際のQGISのverは3.34.5を䜿甚しおおりたした。
最新ver3.36や旧ver3.32では1床もlaspyのむンストヌルが成功したせんでした...
ありた様はどのverを䜿甚しおいたすでしょうか

こういった゚ラヌ原因がご存知でしたら、ご教授頂けるず助かりたす。

お手数をおかけしたすが、ご確認お願い臎したす。

2024幎5月24日金曜日 16:57:36 UTC+9 GTT:

GTT

unread,
May 27, 2024, 10:34:19 PMMay 27
to QGIS初心者質問グルヌプ
ありた様

お䞖話になっおおりたす。

質問しおおいおすいたせん、
゚ラヌの原因を解消するこずが出来たした。

問題PCに蚭定されおいるセキュリティが問題でした。

プロキシを指定するこずで、laspyをinstallができたした。他のverでもinstall可胜でした

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

2024幎5月27日月曜日 16:08:02 UTC+9 GTT:
Reply all
Reply to author
Forward
0 new messages