[Flask+Next.js]ブラウザ(web)上でポリラインのオフセット操作を行う

はじめに

皆様こんにちは。
AMDlab Webエンジニアの塚田です。

今回ですが、以下の仕組みを作成したいと思います。

①ブラウザ上でポリライン等の入力→②サーバー側flask(python)でポリラインのオフセット処理を行う→③ブラウザ上にオフセット処理後のポリラインを表示する

説明

開発環境

バックエンド

Flask

※ポリラインの操作としてPython用の幾何学ライブラリShapelyを使用します。

フロントエンド

Next.js

※React-three/fiber、Dreiについては事前に準備してください。

ソースコード解説

バックエンド

バックエンド側のフォルダ構成

ソースコード

リクエストで受け取るjsonを読み込む関数です。

ポリラインのオフセットを処理する関数です。Python用の幾何学ライブラリShapelyを利用して、ポリラインの各点からポリゴンを生成して、外側、又は内側に形状を維持したまま各点を膨張(縮小)させる処理を行なっています。

公式ドキュメント
The Shapely User Manual

 

バックエンドのmain関数です。リクエストを受け取り、jsonを読み込んで、読み込んだjsonの値に従って形状を維持したまま各点を膨張(縮小)させ、変更した各点の値をレスポンスとして返却します。

フロントエンド側のフォルダ構成

ソースコード

バックエンドにオフセット計算用のjsonを作成、リクエストを送ります。サーバー側からレスポンスを受け取ってオフセットされた各点の値をTHREE.Vector3に変換してstate変数の配列に格納します。

各点から線分を作成して表示します。

今回の処理で必要な計算の関数です。説明は割愛します。

 

http://localhost:3000/threeProcess にアクセスしたときに表示されるページです。オフセット前の形状を入力しCalcResultButtonコンポーネント内のボタンを押すことで、オフセット後の形状用の各点を取得して画面上に線分として表示します。

実行結果

左上の値に従って形状の大きさが拡大されることがわかります。負の数を入れると縮小されます。

まとめ

今回のプロジェクトの作成でサーバー側で幾何学計算を実行する仕組みができました。これをもとに今後幾何学操作の機能を追加していければと思います。


AMDlabでは、開発に力を貸していただけるエンジニアさんを大募集しております。
少しでもご興味をお持ちいただけましたら、カジュアルにお話するだけでも大丈夫ですのでお気軽にご連絡ください!
中途求人ページ: https://www.amd-lab.com/recruit-list/mid-career

カジュアル面談がエントリーフォームからできるようになりました。
採用種別を「カジュアル面談(オンライン)」にして必要事項を記載の上送信してください!
エントリーフォーム: https://www.amd-lab.com/entry

ARTICLES