[OSGeoJapan-discuss] 【Qgis:教えてください】ライン群を同じノード数(たとえば1-10番目)で揃えたい
shimada yasu
yas.shimada35 @ gmail.com
2023年 2月 5日 (日) 18:16:28 PST
みなさま
週末に試行錯誤しました
結局、Qgisでは(素人なので)難しく、Rで頑張りました
●イメージを添付します
●Rnoスクリプト(抜粋)は以下のとおりです
library(foreign)
library(dplyr)
library(circular)
library(sf)
library(psych)
# **** ラインシェープ(shp)の読み込み
shp <- st_read("C:/hoge.shp")
# データフレーム変換
shp_df <- as.data.frame(st_coordinates(shp))
# 点と線のデータフレームとする
point_ID <- as.data.frame(st_cast(shp, "POINT"))
line_df <- as.data.frame(shp)
#点のxyフレームに、IDを付ける
shp_df <- cbind(shp_df, point_ID)
#出力例
# X Y L1 ID species geometry
#400 511138.9 4287588 1 399 マガン POINT (511138.9 4287588)
#400.1 511172.9 4287602 1 399 マガン POINT (511172.9 4287602)
#400.2 511198.8 4287620 1 399 マガン POINT (511198.8 4287620)
#400.3 511222.1 4287636 1 399 マガン POINT (511222.1 4287636)
#400.4 511246.7 4287653 1 399 マガン POINT (511246.7 4287653)
#400.5 511289.2 4287700 1 399 マガン POINT (511289.2 4287700)
となるので、dplyrで距離や角度を計算していって、最後の最後に
# *** ノード数が_N_以上のもので、1:Nを計算し、平均とSDを得る ***
re <- shp_df %>% group_by (ID) %>% summarise( num=n()) %>%
left_join(df, by="ID") %>% filter ( num >= 10 ) %>% group_by(ID) %>%
summarise(speed = mean(distance[1:4]), sd_speed = sd(distance[1:4]),
ave_accel = mean(accel[1:4]), sd_accel = sd(accel[1:4]), cir_mean =
mean(rad_angle[1:4]), cir_sd = sd(rad_angle[1:4]), num=n())
とやってやると
# A tibble: 6 × 11
# ID speed sd_speed ave_accel sd_accel cir_mean cir_sd num ratio
length ave_first_last
# <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <int> <dbl>
<dbl> <dbl>
#1 399 35.3 9.89 -0.548 14.9 0.947 0.280 21 0.949
861. 817.
#2 400 60.5 52.5 0.439 83.5 0.672 0.208 22 0.977
1233. 1205.
#3 402 45.7 13.3 0.943 19.5 1.37 0.0967 19 0.996
1121. 1116.
#4 404 33.2 3.82 1.28 6.08 0.791 0.156 12 0.985
465. 458.
#5 405 36.6 10.9 0.839 16.6 0.372 0.205 25 0.983
1013. 996.
#6 406 47.9 16.9 -0.0209 25.6 0.685 0.133 16 0.992
850. 843.
という結果が得られたので、たぶん上手くいったかなと・・・
ありがとうございました
しまだ
2023年2月4日(土) 9:01 shimada yasu <yas.shimada35 @ gmail.com>:
>
> 大変失礼しました
>
> メーリングリストでの添付は原則、御法度で、NGだと思ってました
>
> このあと試行錯誤しますので、具体的なイメージは、その結果をお知らせするときにお伝えします
>
> 今後はご指摘された点も踏まえ、分かりやすい説明を心がけたいと思います
>
> 引き続きよろしくお願いいたします
>
> しまだ
>
> 2023年2月4日(土) 8:54 <y-iwasa @ limecon.co.jp>:
>>
>> 多分大御所の嘉山さんがご回答されているので解決しているかと思いますが別の観点でアドバイスを。
>>
>>
>>
>> できれば補足資料があった方がいいかと。
>>
>>
>>
>> 多分メール文面だけだとイメージしずらいような...
>>
>>
>>
>> 手書きメモもしくはパワポ等で簡単な絵を添付してもらえるとある意味回答する方も考えやすいかと。
>>
>> まあここら辺は質疑応答時のあるあるかもしれませんが質問者側は作業状況をわかっているので
>>
>> ピンポイント的な質問になってしまいますが、質問される側だと背景等がわからないためアドバイスが難しいような。
>>
>>
>>
>> 素朴な疑問としてノードが10以上あるラインの場合、1~10のノードのみ利用となると残りのノードは必要ないと読み取れてしまいます。
>>
>> となると例えば20個のノードで構成しているラインのうち半分は使わないとなるとそのようなことが何に使えるのかなと疑問をもってしまいます。
>>
>> 土木系なのでラインデータでもノード数は結構あるかと思われるので。
>>
>>
>>
>> 例えばノードは10個以内にして2つのラインに分割ということだとわかるのですが...
>>
>> QGISのプロセッシングツールでできるか見てみましたが線の分割などは分割単位は長さならばできるようですが
>>
>> ノードの数で10単位に分割というのはできないみたいですね。多分プログラム的にはできるような気がしますがそのようなニーズが少ないかないという感じでしょうか?
>>
>>
>>
>> となると嘉山さん案のフィールド計算機で線作成になるかもしれません。
>>
>>
>>
>> もしくはノード数が多いというのは長い線(ライン)と考えてもいいのならまずは線の分割で各線の長さを短くするというのでもいいように思います。
>>
>>
>>
>> いわさ@愛媛
>>
>>
>>
>> From: OSGeoJapan-discuss <osgeojapan-discuss-bounces @ lists.osgeo.org> On Behalf Of shimada yasu
>> Sent: Friday, February 3, 2023 11:11 PM
>> To: Yoichi Kayama <yoichi.kayama @ gmail.com>
>> Cc: osgeojapan-discuss <osgeojapan-discuss @ lists.osgeo.org>
>> Subject: Re: [OSGeoJapan-discuss] 【Qgis:教えてください】ライン群を同じノード数(たとえば1-10番目)で揃えたい
>>
>>
>>
>> ありがとうございます
>>
>>
>>
>> はい、そのイメージです
>>
>>
>>
>> そうか、ノードを10個、ポイントとして出力できれば、ポイントからラインへ、で変換できるかも
>>
>>
>>
>> ありがとうございました 試行錯誤してみます
>>
>>
>>
>> しまだ
>>
>>
>>
>> 2023年2月3日(金) 22:22 Yoichi Kayama <yoichi.kayama @ gmail.com>:
>>
>> ノードというのはライン地物の中にある線分群の結節点(ライン内の連続点)のことでしょうか?
>>
>> そういう前提だと各ラインの頂点の数を最初に求めて、その数にしたがって分類する感じでしょうか。
>>
>>
>>
>> フィールド計算機で num(points( geometry ) という関数を使うとジオメトリ内のポイント数を取得
>>
>> できるみたいですので、結果を属性フィールドに格納します。
>>
>>
>>
>> ポイントの数が10以上のものだけを条件検索して別のレイヤに保存します。
>>
>>
>>
>> 作成されたレイヤのジオメトリを先頭10個のポイントにしたレイヤをフィールド計算機でつくれるかもしれません
>>
>>
>>
>> 関数 make_line( ) でラインを作成できる
>>
>> 関数 point_n で既存のラインから1個づつポイントを取得できるみたいなのでmake_line の引数に point_n で取得
>>
>> した値を10個いれる
>>
>>
>>
>>
>>
>> みたいな感じでいかがでしょうか?
>>
>>
>>
>> あとは pythonでやるという手もありますが。
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> 2023年2月3日(金) 16:24 shimada yasu <yas.shimada35 @ gmail.com>:
>>
>> どなたかご存じでしたらご教示ください
>>
>> ライン群で統計処理をしています
>>
>> 現時点では、ライン群の長さ(というかノード数が)バラバラなのですが、
>> ノード数を統一して、統計処理をしたいのです
>>
>> たとえば「ノード数を10のライン群に揃え直す」としたとき
>>
>> (1)ノード数が10未満のライン--->無視
>> (2)ノード数が10以上のライン--->1番目から10番目のノードだけを抽出
>> (3)(2)で抽出したライン群を、別のラインオブジェクトとする
>>
>> このようなことは可能でしょうか・・・?
>>
>> --
>> 島田泰夫/一般財団法人日本気象協会/環境・エネルギー事業部/環境アセスメント事業課/〒170-6055豊島区東池袋3-1-1サンシャイン60-55F
>> /TEL:03-5958-8160 FAX:03-5958-8157 /shimada @ jwa.or.jp
>> /携帯:080-8018-1567
>> _______________________________________________
>> OSGeoJapan-discuss mailing list
>> OSGeoJapan-discuss @ lists.osgeo.org
>> https://lists.osgeo.org/mailman/listinfo/osgeojapan-discuss
--
島田泰夫/一般財団法人日本気象協会/環境・エネルギー事業部/環境アセスメント事業課/〒170-6055豊島区東池袋3-1-1サンシャイン60-55F
/TEL:03-5958-8160 FAX:03-5958-8157 /shimada @ jwa.or.jp
/携帯:080-8018-1567
-------------- next part --------------
$B%F%-%9%H7A<00J30$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
$B%U%!%$%kL>(B: comp_node_cluster.png
$B7?(B: image/png
$B%5%$%:(B: 62659 $B%P%$%H(B
$B @ bL@(B: $BL5$7(B
URL: <http://lists.osgeo.org/pipermail/osgeojapan-discuss/attachments/20230206/244ec2ef/attachment-0001.png>
OSGeoJapan-discuss メーリングリストの案内