米国で日食の観覧パーティーを開催するのに最適な場所を特定 (2024/03/29)

米国で日食の観覧パーティーを開催するのに最適な場所を特定 (2024/03/29)

https://blogs.oracle.com/database/post/identify-the-best-places-in-the-us-to-host-a-solar-eclipse-viewing-party

投稿者:Denise Myrick | Senior Product Manager


もしあなたが北アメリカにいるなら、来月は日食があることに気づいていると言ってもいいでしょう。たぶん、あなたはそれを見るために完全性の道に十分近くに住むことができるほど幸運です。どうやってどこへ行くか決めるのか。いくつかの質問への回答に役立つAPEXアプリケーションを作成しましょう。(1)全体道はどこにあるのか?(2)人口が十分に高い道のりにある都市は、ランチスポットや公共バスルームなどのいくつかの設備にアクセスできます。(3)もっと大事なのは、天気はどうなるのか。さあ始めましょう。



アカウントの作成とデータセットのダウンロード


準備を邪魔にならないようにしましょう。まず必要なのは、OCIアカウントです。まだお持ちでない方は、こちらからお問い合わせください。次に、いくつかのデータセットが必要になります。こちらからダウンロード。最後に必要なのは、OpenWeatherMap.orgのアカウントです。これにより、訪問に関心のある都市の天気情報をインポートして、クラウドのカバレッジが問題にならないことを確認できます。



APEXインスタンスの作成


これらの手順は、APEXのマップおよびSpatialのスタート・ガイドから順応しています。これらの機能についてさらに学習したい場合、これは優れたリソースです。


  1. Oracle Cloud環境内から、Oracle APEX Application Development Serviceのインスタンスを作成します。
    左上のナビゲーション・メニューをクリックし、「開発者サービス」に移動して「APEXインスタンス」を選択します。
  2. コンパートメントを選択し、「APEXサービスの作成」をクリックします。
  3. 「Always Free」オプションを有効にします。データベース・バージョンとして19cを選択します。ADMINパスワードのパスワードを入力し、「APEXサービスの作成」をクリックします。
  4. 「APEXサービスの作成」をクリックすると、新しいインスタンスの「APEXアプリケーション開発の詳細」ページにリダイレクトされます。
  5. 新しいAPEXアプリケーション開発サービス内では、APEXワークスペースはまだ構成されていません。そのため、APEXに初めてアクセスするときは、APEXインスタンス管理者としてログインしてワークスペースを作成する必要があります。「APEXの起動」をクリックします
    ノート: APEXアプリケーション開発サービスは有料サービスです。APEXサービス・トライアルは、新しい無料クラウド・アカウントがある場合、またはトライアル期間内にいる場合にのみ使用できます。APEXサービスがトライアル・クレジットを使用しないようにするには、その背後にあるAutonomous Databaseを停止する必要があります。「APEXインスタンスの詳細」ページの「APEXインスタンス情報」タブで「データベース名」をクリックします: 「その他のアクション」をクリックし、「停止」をクリックします
  6. 管理サービスのパスワードを入力し、「管理にサインイン」をクリックします。
    パスワードは、APEXインスタンスの作成時にADMINユーザーに入力したパスワードと同じです。
  7. 「ワークスペースの作成」をクリックします。



データのロードと構成


1. 「ワークスペースの作成」ダイアログで、次のように入力します。

Property Value
Workspace Name eclipse
Database user eclipse
Password <your password>

「ワークスペースの作成」をクリックします。


  • 「APEXインスタンス管理」ページで、成功メッセージの「ECLIPSE」リンクをクリックします。
    ノート: これにより、APEX管理からログアウトされ、新しいワークスペースにログインできるようになります。
  • APEXワークスペースのログイン・ページで、パスワードを入力し、「ワークスペースとユーザー名の記憶」チェック・ボックスを選択して、「サインイン」をクリックします。


2. APEXにログインしたら、このアプリケーションに必要なデータをアップロードする必要があります

3. 「SQLワークショップ」→「ユーティリティ」→「データ・ワークショップ」→「データのロード」をクリックします。


  • ファイルを一度に1つずつアップロードし、表名を変更します。

File Name Table Name
geonames-usa-cities.geojson US_CITIES
umbra_lo.geojson UMBRA
upath_lo.geojson UPATH
center.geojson CENTER


  • 各ファイルをアップロードした後、「データのロード」をクリックします。
  • 画面右上の「X」ボタンを使用して、データ・ロード・ページに戻ります。4つのファイルがすべてアップロードされると、4つの表がすべてロードされることを確認するためのリフレッシュ・ページがアップロードされます。


4. ヘッダーの「SQLワークショップ」をクリックします。

5. 「SQLコマンド」をクリックします。

6. 各表に、sdo_geometryという列を追加します。

alter table umbra add (geom sdo_geometry)

alter table upath add (geom sdo_geometry)

alter table center add (geom sdo_geometry)

alter table us_cities add (geom sdo_geometry)


説明: ジオメトリは JSONオブジェクトとして格納されます。ユーティリティを使用してSDOジオメトリに変換する必要があります。

ノート: データセットのアップロード時に表名を含まなかった場合、表名はここで異なります。SQL文を表名に変更します。


7. 新しく作成したGEOM列の空間メタデータ・エントリの追加


  • UPATH表用

begin
apex_spatial.insert_geom_metadata (
           p_table_name => 'UPATH',
           p_column_name => 'GEOM',
           p_diminfo => SDO_DIM_ARRAY (
                    SDO_DIM_ELEMENT('X', -180, 180, 0.5),
                    SDO_DIM_ELEMENT('Y', -90, 90, 0.5) ),
           p_srid => apex_spatial.c_wgs_84 );
end;
/

  • UMBRA 表用

begin 
apex_spatial.insert_geom_metadata ( 
     p_table_name => 'UMBRA', 
     p_column_name => 'GEOM', 
     p_diminfo => SDO_DIM_ARRAY ( 
            SDO_DIM_ELEMENT('X', -180, 180, 0.5), 
            SDO_DIM_ELEMENT('Y', -90, 90, 0.5) ), 
     p_srid => apex_spatial.c_wgs_84 ); 
end; 
/

  • CENTER 表用

begin
apex_spatial.insert_geom_metadata (
           p_table_name => 'CENTER',
           p_column_name => 'GEOM',
           p_diminfo => SDO_DIM_ARRAY (
                    SDO_DIM_ELEMENT('X', -180, 180, 0.5),
                    SDO_DIM_ELEMENT('Y', -90, 90, 0.5) ),
           p_srid => apex_spatial.c_wgs_84 );
end;
/

  • US_CITIES 表用

begin 
apex_spatial.insert_geom_metadata (
           p_table_name => 'US_CITIES',
           p_column_name => 'GEOM',
           p_diminfo => SDO_DIM_ARRAY (
                    SDO_DIM_ELEMENT('X', -180, 180, 0.5),
                    SDO_DIM_ELEMENT('Y', -90, 90, 0.5) ),
           p_srid => apex_spatial.c_wgs_84 );
end;
/

  • 各表のGEOMETRY列のgeojsonテキストからgeom列を移入します。

update center set geom = sdo_util.from_geojson(geometry) ;
update umbra set geom = sdo_util.from_geojson(geometry) ;
update us_cities set geom = sdo_util.from_geojson(geometry) ;
update upath set geom = sdo_util.from_geojson(geometry) ;

  • 作成されたことを確認します。

select id, sdo_util.getnumvertices(geom) as Num_Points from upath ; 
select id, sdo_util.getnumvertices(geom) as Num_Points from center ; 
select id, sdo_util.getnumvertices(geom) as Num_Points from umbra ; 
select id, sdo_util.getnumvertices(geom) as Num_Points from us_cities ;

  • Long/Latポイントは、sdo_pointというsdo_geometryの属性に格納されます。これを使用して、後続の問合せで経度と緯度を取得します。

select id, name, c.geom.sdo_point.y as Latitude, c.geom.sdo_point.x as Longitude 
from us_cities c fetch first 10 rows only ;

  • それでは、10,000人を超える人口を持つ都市を見つけましょう。中心線から10マイル以内にあり、日食全体の経路を表しています。

select c.name, c.admin1_code State , c.geom.sdo_point.x Longitude, c.geom.sdo_point.y Latitude 
from us_cities c, center l 
where c.population > 10000 and 
sdo_within_distance(c.geom, l.geom, 'unit=mile distance=10') = 'TRUE';

  • NH MEまたはVTのものと中央からの距離を見つけましょう

select c.name City, c.admin1_code State, 
sdo_geom.sdo_distance(c.geom, l.geom, 0.5, 'unit=mile') Dist_From_Center_In_Miles,  
c.geom.sdo_point.x Longitude, c.geom.sdo_point.y Latitude from us_cities c, center l 
where c.population > 5000 and c.admin1_code in ('NH', 'ME', 'VT') and 
sdo_within_distance(c.geom, l.geom, 'unit=mile distance=10') = 'TRUE';

  • distを25マイルに変更し、populationを> 5000に変更して、c.name City、c.admin1_code Stateを選択します。

sdo_geom.sdo_distance(c.geom, l.geom, 0.5, 'unit=mile') Dist_From_Center_In_Miles,  
c.geom.sdo_point.x Longitude, c.geom.sdo_point.y Latitude from us_cities c, center l 
where c.population > 5000 and c.admin1_code in ('NH', 'ME', 'VT') and 
sdo_within_distance(c.geom, l.geom, 'unit=mile distance=25') = 'TRUE';

  • この最後の問合せをマップ・リージョンとともに使用して、APEXのマップに都市を表示できます。都市のGEOM列を問合せに追加するだけです。

select c.name City, c.admin1_code State,  c.geom Geom,
sdo_geom.sdo_distance(c.geom, l.geom, 0.5, 'unit=mile') Dist_From_Center_In_Miles,  
 c.geom.sdo_point.x Longitude, c.geom.sdo_point.y Latitude from us_cities c,  center l 
 where c.population > 5000 and c.admin1_code in ('NH', 'ME', 'VT') and 
 sdo_within_distance(c.geom, l.geom, 'unit=mile distance=25') = 'TRUE';



Webページの作成


さて、使用するクエリを特定したので、データセットを簡単に探索できるように、Webページを作成しましょう。私たちが最後に書いたクエリは、ニューハンプシャー州、メイン州、バーモントの都市に、5000人以上の人口を抱える中心線から25マイル以内の都市を提供します。冒険を感じている場合は、状態またはポピュレーションを変更して、結果がどのように変化するかを確認できます。この問合せを使用して、ページを移入します。



  1. アプリケーション・ビルダーをクリックしてアプリケーション・ビルダーのホーム画面に戻り、アプリケーションをクリックします
  2. 「ホーム」をクリックしてページ・デザイナを開きます。
  3. 左側のセクションで、本文の下にリージョンを作成します。
  4. 右側のメニューで、

    • タイトルは「Cities Nearby」
    • 対話モード・レポートへのタイプ
    • ローカル・データベースへの場所
    • タイプからSQL問合せ
    • 「SQL問合せ」フィールド・ボックスに最後の問合せを貼り付けます。

select c.name City, c.admin1_code State, c.geom GEOM,
sdo_geom.sdo_distance(c.geom, l.geom, 0.5, 'unit=mile') Dist_From_Center_In_Miles,  
c.geom.sdo_point.x Longitude, c.geom.sdo_point.y Latitude from us_cities c, center l 
where c.population > 5000 and c.admin1_code in ('NH', 'ME', 'VT') and 
sdo_within_distance(c.geom, l.geom, 'unit=mile distance=25') = 'TRUE';

  • 「実行」をクリックして結果ページを表示します。
  • 上で作成した資格証明を使用してサインインします。

5. アプリケーション・ビルダーに戻り、ブレッドクラムをクリックしてホーム画面(アプリケーション101)に戻ります。



RESTデータ・ソース


前に作成したOpenWeatherMapアカウントを使用して、RESTデータ・ソースを追加します。


  1. 「Share Components the REST Data Sources」をクリックします。
  2. 「作成」をクリックします
  3. 「最初から」を選択し、「次へ」をクリックします。
  4. 入力:
    • 名前: 天気アプリ
    • URLエンドポイント
  5. OpenWeatherMapアカウントに戻ります。「API」をクリックし、「5日/3時間の予測」まで下にスクロールします。「APIドキュメント」をクリックします。APIコールをコピーします。
  6. ?lat={lat}&lon={lon}&appid={API key}を削除https://で追加します。したがって、URLエンドポイントはhttps://api.openweathermap.org/data/2.5/forcast
  7. 「次へ」をクリックします。
  8. 「Remote Server」ページで、「Next」をクリックします。
  9. ページ区切りページで、「次」をクリックします。
  10. 「認証」ページで、次のように変更します。

  • 認証タイプ: URL問合せ文字列
  • 名前: appid
  • 値: OpenWeatherAppページに戻ります。ユーザー・ドロップダウン・メニューでAPIキーをクリックし、キーをコピーします

11. 「詳細」をクリックします。

12. 「パラメータ」で、次を作成します。

Parameter Type Parameter Name Value Is Static
URL Query String lat 44.55 Off
URL Query String lon -73.13 Off
URL Query String cnt 15 On
URL Query String units imperial On

「検出」をクリックして結果を確認します。

13. 「Create REST Data Source」をクリックします。




RESTデータ・ソース・プロファイルの構成


  1. 「データ・プロファイル」→「データ・プロファイルの編集」をクリックします。
  2. 「編集」をクリックして列設定を編集します。
  3. DT_TXT、一時、Temp_Max、Temp_Min、Feels_likeおよびAll_のみを表示します。DT_TXTのデータ型をVARCAR2に変更します。変更を適用し、アプリケーション101に戻ります。


ページ・アイテムの作成


  1. 「近くの都市」を右クリックして「ページ・アイテムの作成」を2回選択すると、「リージョン本体」の下に2つのページ・アイテムが表示されます。
  2. 最初のページ・アイテムについて、次の設定を変更します。
    • 名前: P1_LAT
    • ラベル: 緯度
    • 「[Enter]を押すと送信」を切り替えます
    • デフォルト・タイプ: static
    • 静的値: 44.55
  3. 最初のページ・アイテムについて、次の設定を変更します。
    • 名前: P1_LON
    • ラベル: 経度
    • 「[Enter]を押すと送信」を切り替えます
    • デフォルト・タイプ: static
    • 静的値: -73.17


天候リージョンの作成


  1. 本体を右クリックし、「リージョンの作成」を選択します。
  2. 右側のメニューで、次を変更します。
    • タイトル: 天気
    • タイプ: クラシック レポート
    • ソース: RESTソース
    • RESTソース: <name of your weather REST source>
  3. パラメータの展開
  4. 「lat」をクリックします。
    • 「値」で、タイプを項目に変更し、項目としてP1_latを選択します
  5. 「lon」をクリックします。
    • 「値」で、タイプを項目に変更し、項目としてP1_lonを選択します
  6. 列を展開
    • DT_TXTをクリックします。見出しを「予測日」に変更します。
    • 「一時」をクリックします。ヘッダーを「Current Temp (F)」に変更します。
    • Temp_MAXをクリックします。「Temp Mac (F)」の見出しを変更します。
    • Temp_MINをクリックします。見出しを「Temp Min (F)」に変更します。
    • Feels_Likeをクリックします。「Feels Like (F)」の見出しを変更します。
    • All_をクリックします。「クラウド・カバー(%)」への見出しの変更
  7. これらの変更を保存して実行
  8. ウォッチパーティーに参加する都市を選択し、その理由を教えてください!



ボーナス


2番目のページを作成して、日食のパスを示すマップを視覚化し、都市が合計のパスに近い場所を示します。


  1. アプリケーション101に戻り、「Create」ページをクリックします。
  2. マップの選択
  3. 「マップの作成」で、「表/ビュー名」を「センター」に変更します。「次へ」をクリックします。
  4. 「マップ属性」で、「ジオメトリ列」をGEOM(SDO_Geometry)に変更します。ツールチップ列をNAMEに変更します。
  5. 「作成」ページをクリックします。
  6. ページ・デザイナで、「レイヤー」を右クリックし、「新規レイヤー」をクリックします。

    • 名前: Swath
    • 層のタイプ: ポリゴン
    • 表名: UPATH
    • ジオメトリ列: GEOM
    • 主キー列: ID
    • 塗りつぶしの色: 薄い灰色を選んで下さい
    • 充填不透明度: 0.3
    • ストローク色: ライトグレーを選択

7. 新しいマップを保存して表示

8. ページ・デザイナに戻り、近くの都市を追加します

9. 新しいレイヤーを作成

  • 名前: pop>5000
  • タイプ: SQL問合せ
  • SQL問合せ:


select c.name City, c.admin1_code State, c.geom Geom, 
sdo_geom.sdo_distance(c.geom, l.geom, 0.5, 'unit=mile') Dist_From_Center_In_Miles,  
c.geom.sdo_point.x Longitude, c.geom.sdo_point.y Latitude from us_cities c, center l 
where c.population > 5000 and c.admin1_code in ('OH', 'PA', 'NY', 'VT') and 
sdo_within_distance(c.geom, l.geom, 'unit=mile distance=25') = 'TRUE';


  • 列マッピング->ジオメトリ列: GEOM
  • 主キー列: 市


10. 地図を保存して表示し、別の都市を選択するかどうかを確認してください!





コメント

このブログの人気の投稿

Oracle RACによるメンテナンスのためのドレインとアプリケーション・コンティニュイティの仕組み (2023/11/01)

Oracle Cloud Infrastructure Secure Desktopsを発表: デスクトップ仮想化のためのOracleのクラウドネイティブ・サービス (2023/06/28)

Oracle Cloudのデータベースをオブジェクト・ストレージにバックアップする3つの方法 (2021/12/13)