ヘッダーをスキップ
Oracle® Spatial開発者ガイド
11gリリース2 (11.2)
B72087-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

13 ルーティング・エンジン

Spatialのルーティング・エンジンを使用すると、次の情報を提供するXMLベースのWebサービスをホストできます。

いずれのリクエストの場合も、出発地および目的地は、住所、ジオコード結果または経度/緯度座標によって識別されます。

ルートには、シングルアドレス(出発地と目的地で構成)またはマルチアドレス(出発地、1つ以上の中間地および目的地で構成)を使用できます。

マルチアドレス・ルートについては、13.1項を参照してください。

ルーティング・エンジンは、Java 2 Enterprise Edition (J2EE)のWebアプリケーションとして実装され、Oracle Weblogic Server、Oracle Application ServerまたはスタンドアロンのOracle Application Server Containers for J2EE (OC4J)環境のいずれかにデプロイできます。

図13-1に、ルーティング・エンジンを使用する基本的なアクション・フローを示します。クライアントは、リモートのルーティング・エンジン・インスタンスを探してルート・リクエストを送信し、ルーティング・エンジン・インスタンスから戻されたルート・レスポンスを処理します。

図13-1 Spatialルーティング・エンジンを使用した基本的なアクション・フロー

図13-1の説明が続きます。
図13-1「Spatialルーティング・エンジンを使用した基本的なアクション・フロー」の説明

この章の内容は次のとおりです。

13.1 マルチアドレス・ルーティング

マルチアドレス・ルートには、出発地と目的地の他に、1つ以上の中間地が含まれます。そのため、マルチアドレス・ルートには、サブルートが含まれます(各サブルートは2点間のパスを含みます)。ルートまたはサブルートには、1つ以上のセグメントが含まれます(各セグメントは、ルートまたはサブルートに沿った2点間のパスを含みます)。

たとえば、職場から顧客Aまで運転し、次に顧客B、その次に顧客Cまで運転する必要があるとします。

  • ルートには、職場が出発地、顧客AとBが中間地、そして顧客Cが目的地として含まれます。

  • ルートには、(1)職場から顧客A、(2)顧客Aから顧客Bおよび(3)顧客Bから顧客Cという3つのサブルートが含まれます。

  • 各サブルートには、複数のセグメントが含まれる場合があります(各セグメントは、特定の運転方向ステップに関連付けられます)。

マルチアドレス・ルートには、<start_location>要素、1つ以上の<location>要素および<end_location>要素が含まれます。これらの要素のサブルート関連属性のいくつか(return_subroutesreturn_subroute_edge_idsreturn_subroute_geometryなど)は、マルチアドレス・ルーティングのみに適用されます。これらの要素と属性については、13.3.2項を参照してください。

マルチアドレス・ルーティングでは、戻されるルートに、リクエストで指定したとおりの順序で場所が含まれます。マルチアドレス・ルーティングでは、場所の再配置によって、時間や距離に対してルートを最適化することはありません(具体的には、TSP (巡回セールスマン問題)計算を実行しません)。

13.2 ルーティング・エンジンのデプロイおよび構成

ルーティング・エンジンがルーティング・リクエストの処理およびレスポンスの生成を行うことができるようにするには、ルーティング・データ上にネットワーク(Oracle Databaseネットワーク・データ・モデルのネットワーク)を作成してから、Oracle WebLogic Server、Oracle Application ServerまたはOC4Jを使用してrouteserver.earファイルをデプロイする必要があります。ここでは、基本的な手順を示します。

ネットワークを作成するには、次の手順を実行します。

  1. ルーティング・データを使用しているネットワークがすでに存在する場合は、作成するネットワーク内のすべての構造が確実にクリーンな状態になるように、そのネットワークを削除します。既存のネットワークを削除するには、次の形式の文を実行します。

    EXECUTE SDO_ROUTER_PARTITION.DELETE_ROUTER_NETWORK('<log_file_name>', '<network_name>');
    

    <log_file_name>は、削除されるネットワークを作成するためにSDO_ROUTER_PARTITION.DELETE_ROUTER_NETWORKのコールで指定されたログ・ファイルの名前です。

    <network_name>は、削除されるネットワークの名前です。

    次に例を示します。

    EXECUTE SDO_ROUTER_PARTITION.DELETE_ROUTER_NETWORK('create_sf_net.log', 'ndm_sf_net');
    
  2. 次の形式の文を実行して、ルーティング・データ用のネットワークを作成します。

    EXECUTE SDO_ROUTER_PARTITION.CREATE_ROUTER_NETWORK('<log_file_name>', '<network_name>');
    

    <log_file_name>は、このネットワークに使用するログ・ファイルの名前です。

    <network_name>は、作成されるネットワークの名前です。

    次に例を示します。

    EXECUTE SDO_ROUTER_PARTITION.CREATE_ROUTER_NETWORK('create_sf_net.log', 'ndm_sf_net');
    

    ログ・ファイルには、最初に次のようなメッセージが含まれています。

    INFO: creating the Routeserver network: NDM_SF_NET
         creating indexes
         creating views
         generating metadata
    

ルーティング・エンジンのデプロイおよび構成を行うには、次の手順を実行します。

  1. 次の要素を、http-web-site.xmlまたはdefault-web-site.xmlファイルの<web-site>要素内に追加します。

    <web-app application="routeserver" 
              name="web" 
              load-on-startup="true" 
              root="/routeserver" 
              max-inactivity-time="no shutdown" 
              shared="false" />
    
  2. Oracle WebLogic Server、Oracle Application ServerまたはOC4Jを使用してルーティング・エンジンをデプロイします。

    • Oracle WebLogic Serverを使用する場合: $ORACLE_HOME/md/jlibディレクトリのrouteserver.earファイルを解凍します。routeserver.earファイルの名前を変更し、その内容を../routeserver.earという名前のディレクトリに解凍します。$routeserver.ear/ディレクトリ下に表示されるようになったweb.warファイルの名前を変更し、その内容を../web.warという名前のサブディレクトリに解凍します。したがって、ディレクトリ構造は$routeserver.ear/web.war/となる必要があります。

      routeserver.earファイルとweb.warファイルの解凍後、$ORACLE_HOME/LIB/ディレクトリのxmlparserv2.jarファイルを$routeserver.ear/web.war/WEB-INF/lib/ディレクトリにコピーします。

      routeserver.earファイルをデプロイするには、WLSコンソール(http://<hostname>:7001/consoleなど)にログオンし、「デプロイメント」から、デプロイメントに対して名前routeserverを受け入れ、さらに指定した場所からデプロイメントにアクセスできるようにするオプションを選択して、routeserver.earファイルをインストールします。

    • Oracle Application ServerまたはOC4Jを使用する場合: OracleASまたはスタンドアロンのOC4J Application Server Control (http://<hostname>:8888/emなど)を使用して、$ORACLE_HOME/md/jlibディレクトリのrouteserver.earファイルをデプロイします。既存のOC4Jインスタンスにrouteserver.earファイルをデプロイすることも、ルーティング・エンジン用に新しいOC4Jインスタンスを作成することもできます。どちらの場合も、デプロイ中に「アプリケーション名」にrouteserverと入力します。

  3. URL http://<hostname>:<port>/routeserverを使用してWebブラウザでOracleのルーティング・エンジンのようこそページを表示します。ようこそページで、「管理」リンクを選択し、管理者(weblogicまたはoc4jadmin)のユーザー名およびパスワードを入力します。


    注意:

    WebLogic Serverを使用しているが、デフォルトのWebLogic管理者のユーザー名を使用していない場合は、$routeserver.ear/web.war/WEB-INF/ディレクトリにあるweblogic.xmlファイルを編集する必要があります。<principal-name>weblogic</principal-name>をWebLogic Server管理者のユーザー名に置換します(<principal-name>my_weblogic_admin</principal-name>など)。

  4. 同時リクエストの最大数(max-http-connections)の値を10に制限します。たとえば、OC4Jの場合、次の要素を、server.xmlファイルの<application-server>要素内に追加します。

    <max-http-connections value="10" />
    

    Oracle Route Serverがjava.lang.OutOfMemoryErrorエラーを発生することなく、常に処理できる同時リクエスト数を制限することは重要です。

  5. web.xmlファイルを構成し(13.2.1項を参照)、変更を保存します。

  6. Oracle WebLogic ServerまたはOracle Application Serverにデプロイした場合は、ルーティング・エンジンを再起動します。

    ようこそページが表示されない場合は、新しくデプロイされたルーティング・エンジン・サービスが正常に起動されたことを確認してください。ルーティング・エンジン・サービスは、Oracle Databaseリリース11.2以上のrouteserver.earファイルでWebLogic Server 10.3.1.0以上を実行しているか、Oracle 11g以上のrouteserver.earファイルでOracle ASまたはOC4J 10.1.3以上を実行していることを前提としています。

  7. OC4Jインスタンスにデプロイした場合は、次のコマンド・オプションを使用してOC4Jを起動します。

    -server 
    -Xms<HEAP_SIZE>
    -Xmx<HEAP_SIZE>
    -XX:NewSize=<YOUNG_GENERATION_SIZE>
    -XX:MaxNewSize=<YOUNG_GENERATION_SIZE>
    -Dsun.rmi.dgc.server.gcInterval=3600000 
    -Dsun.rmi.dgc.client.gcInterval=3600000
    -verbose:gc  (optional)
    

    <HEAP_SIZE>は、512MB以上である必要があります。推奨サイズは、1024MB (1GB)以上です。このメモリーは仮想メモリーではなく、物理メモリーであることに注意してください。

    <YOUNG_GENERATION_SIZE>は、<HEAP_SIZE>値の1/4(25%)である必要があります。

    -verbose:gcは、マイナーおよびメジャーのJavaガベージ・コレクションをすべて出力します。これらの統計を監視すると、メモリー・リソース計画に役立ちます。ガベージ・コレクションが頻繁に発生したり、数秒間にわたり継続する場合は、Java VMに物理メモリーをさらに割り当てる必要がある可能性があります。


    注意:

    Java VMに必要となるメモリー量は、主に2つのパラメータによって決定されます。1つは、server.xml<application-server>要素の<max-http-connections value="..." />要素、もう1つは、web.xmlpartition_cache_size_limitパラメータです。

    次のコマンドは、OC4Jを起動する例です。-configフラグは、OC4Jコマンドライン・パラメータであり、VMオプションではないことに注意してください。

    c:\jdk1.5.0_06\bin\java -server 
                            -Xms1024m 
                            -Xmx1024m 
                            -XX:NewSize=256m 
                            -XX:MaxNewSize=256m 
                            -Dsun.rmi.dgc.server.gcInterval=3600000 
                            -Dsun.rmi.dgc.client.gcInterval=3600000
                            -verbose:gc 
                            -jar c:\oc4j\j2ee\home\oc4j.jar 
                            -config c:\oc4j\j2ee\home\config\server.xml
    
  8. 次の書式でURLにアクセスし、デプロイメントを確認します。

    http://<hostname>:<port>/routeserver
    

    ようこそページが表示されます。また、OC4Jを起動したコンソール・ウィンドウには、Oracle Route Serverが正常に初期化されたことを示すメッセージが表示されます。

    ようこそのメッセージが表示されない場合、ルート・サーバーは、ご使用の環境で適切に動作するように構成されていない可能性があります。このような場合は、<ROUTE_SERVER_HOME>/routeserver/web/WEB-INF/web.xmlファイルを編集して、ご使用の環境とプリファレンスを反映します。(web.xmlファイルは、routeserver.earファイル内にあり、OC4Jがこれを<ROUTE_SERVER_HOME>の下のルート・サーバー・ディレクトリ構造に展開するまでは表示されません。)編集が終了したら、ルーティング・エンジンまたはOC4Jを再起動して、デプロイメントを確認します。

  9. 提示される例を参照します。http://<hostname>:<port>/routeserver/のページには、テスト・サンプルというセクションの下部にリンクがあります。これらの例では、Oracle Route Serverの様々な機能を実例を使用して説明します。これは、XML API(13.3項を参照)の学習に適しています。

13.2.1 web.xmlファイルの構成

多くの場合(特に、古いweb.xmlファイルの設定を使用する場合や、言語を指定したり長いID値を使用する場合)、Spatialに含まれているデフォルトのweb.xmlファイルの一部を変更する必要があります。編集または追加する必要があると考えられるパラメータを次に示します。

次のパラメータは、web.xmlファイル内で表示される順にグループ化されリストされています。web.xmlファイル内の説明的なコメントも参照してください。

Route Serverの初期化パラメータ:

  • routeserver_schema_jdbc_connect_string: ルーティング・データを含むデータベースへの接続文字列。

  • routeserver_schema_username: Oracleのルーティング・データにアクセスするために作成されたユーザーの名前。

  • routeserver_schema_password: Oracleのルーティング・データにアクセスするために作成されたユーザーのパスワード。パスワードを不明瞭にするには、パスワード文字列の前に感嘆符(!)を配置します。この処理を行うと、パスワードが不明瞭化され、次にルーティング・エンジンを起動するとweb.xmlファイルが再書込みされます。

  • routeserver_network_name: TBS???ルーティング・エンジンのネットワーク名。

  • routeserver_schema_connection_cache_min_limit: ルーティング・エンジンによってキャッシュされるデータベース接続の最小数。

  • routeserver_schema_connection_cache_max_limit: ルーティング・エンジンによってキャッシュされるデータベース接続の最大数。

Geocoderのパラメータ:

  • geocoder_type: 使用されるジオコーダのタイプであり、httpclient (Javaサーブレットと対話するHTTPクライアント)、thinclient (Oracle Databaseジオコーダと対話するThinクライアント)またはnone (ジオコーダの提供なし)のいずれかを指定します。

    geocoder_typethinclientであり、かつジオコーダとルーティング・エンジンが同じOC4Jコンテナ内にある場合は、データ・ソースを使用し、かつ接続プールの競合を回避するようにジオコーダを構成する必要があります。

    このパラメータの値に応じて、web.xmlファイルのHTTPクライアントまたはThinクライアントのセクションの設定が確認され、必要に応じて編集されます。たとえば、thinclientを指定した場合、routeserver_schema_passwordパラメータを使用する場合と同じ方法でOracle Geocoderのパスワードを不明瞭化できます。

  • geocoder_type = httpclientの場合に使用されるパラメータ: geocoder_http_urlgeocoder_http_proxy_hostgeocoder_http_proxy_port

  • geocoder_type = thinclientの場合に使用されるパラメータ: geocoder_schema_hostgeocoder_schema_portgeocoder_schema_sidgeocoder_schema_usernamegeocoder_schema_passwordgeocoder_schema_mode

ロギング・パラメータ:

  • log_filename: ログ・ファイルの場所(相対または絶対)と名前。

  • log_level: ログ・ファイルに書き込まれる情報のタイプ(および量)。情報量が最も少ないレベルから最も多いレベルの順に、FATAL、ERROR、WARN、INFO、DEBUGまたはFINEST (すべてのメッセージ)を指定します。

  • log_thread_name: 各エントリを作成するスレッドの名前をログに含めるかどうか。

  • log_time: 各エントリの時間を含めるかどうか。

道路を説明するパラメータ:

  • max_speed_limit: 任意の道路セグメントの最大制限速度(m/s)。 (34m/sは、約122km/hまたは約75マイル/時間です。)

  • local_road_threshold: マイル数(デフォルト値は25、最小値は10)。ソース・ノードと宛先ノード間の予想距離(マイル)がこの値以下である場合、地方道路はオプションとして考慮され、予想距離がこの値より大きい場合、地方道路は考慮されません。

    このパラメータによって、短ルートのための最適化が有効になります。値を小さくすると、検索対象となるソリューション・セットのサイズが小さくなるため、ルーティング・エンジンのパフォーマンスを向上できます。ただし、ルーティング・エンジンは通行可能な地方道路のルートを考慮しないため、最適化されていない短ルートが生成される可能性があります。値を(デフォルト値の25より)大きくすると、地方道路を使用したより正確なルートを生成できます。ただし、検索対象のソリューション・セットのサイズが大きくなるため、ルーティング・エンジンのパフォーマンスが低下する可能性があります。

  • highway_cost_multiplier: route_preferencelocalに設定してルートを計算するときに、高速道路の利点を下げる量。

  • driving_side: 交通が右側通行の場合はR(デフォルト)、交通が左側通行の場合はL。

  • language: 運転方向の生成に使用するデフォルトの言語。サポートされている言語は英語(デフォルト)、フランス語、ドイツ語、イタリア語およびスペイン語です。

  • long_ids: TRUE(デフォルト)を指定すると、ID値の長さがINTEGERではなくLONGデータとして格納されます。FALSEを指定すると、ID値の長さがLONGではなくINTEGERデータとして格納されます。

    リリース11.1より前のOracle Databaseを使用してパーティション化されているルーティング・データを使用する場合は、現行のリリースを使用してデータを再パーティション化するまで、long_idsパラメータ値をFALSEに設定する必要があります。

  • distance_function_type: 測地座標系(緯度/経度のSRID 8307など)の場合はgeodetic、投影座標系の場合はeuclidean

パーティション化パラメータ:

  • partition_cache_size_limit: ネットワーク・パーティション・キャッシュで保持できるパーティションの最大数。パーティションがすでにキャッシュ内にある場合、ルーティング・エンジンはデータベースからパーティションをロードする必要がありません(ただし、この値の設定が高すぎると、メモリー不足のエラーが発生する場合があります)。

  • partition_table_name: ネットワーク・パーティションを含むパーティション表の名前。(この表は、routeserver_schema_jdbc_connect_stringrouteserver_schema_usernameおよびrouteserver_schema_passwordパラメータに関連付けられたスキーマ内にあると想定されています。)

13.3 ルーティング・エンジンのXML API

この項では、XML形式のルート・リクエストをルーティング・エンジンに送信する方法、およびルート・リクエスト(入力)とルート・レスポンス(出力)のXML Document Type Definition(DTD)について説明します。XMLは、構造化されたドキュメントをHTTPプロトコルで伝送する際に広く利用されています。HTTPリクエスト(GETまたはPOSTメソッド)を使用する場合、そのリクエストには、xml_requestというパラメータがあり、その値は、リクエストのXML文書が含まれる文字列であると想定されます。

ルーティング・エンジン・サーブレットへのリクエストの書式は、次のとおりです。

http://hostname:port/route-server-servlet-path?xml_request=xml-request

この書式のパラメータの意味は、次のとおりです。

  • hostname: ルーティング・エンジンが実行されているサーバーのネットワーク・パスです。

  • port: アプリケーション・サーバーがリスニングするポートです。

  • route-server-servlet-path: ルーティング・エンジン・サーブレットのパスです(たとえば、routeserver/servlet/RouteServerServlet)。

  • xml-request: URLエンコードされたXMLリクエストです。HTMLのGETまたはPOSTメソッドを使用して送信されます。

入力XMLは、すべてのリクエストで必要です。出力は、XML文書になります。

一括ルート・リクエストではなく単純なルート・リクエストの場合は、ルートIDを指定する必要があります。また、次の属性を1つ以上指定できます。

  • route_preference: fastestまたはshortest(デフォルト)

  • road_preference: highway(デフォルト)またはlocal

  • return_driving_directions(運転方向を戻すかどうか): trueまたはfalse(デフォルト)

  • return_hierarchical_directions(階層的な方向を戻すかどうか): trueまたはfalse(デフォルト)

  • return_locations (ルートおよび任意のサブルートの出発地と目的地を戻す): true (デフォルト)またはfalse

  • return_subroutes (サブルートを戻すかどうか): true (マルチアドレス・ルートの場合はデフォルト、シングルアドレス・ルートの場合は無視)またはfalse

  • return_route_geometry(ルートの線ストリングの座標を戻すかどうか): trueまたはfalse(デフォルト)

  • return_subroute_geometry (各サブルートの線ストリングの座標を戻すかどうか): trueまたはfalse (マルチアドレス・ルートの場合はデフォルト、シングルアドレス・ルートの場合は無視)

  • return_segment_geometry(ルートのマヌーバごとに線ストリングの座標を戻すかどうか): trueまたはfalse(デフォルト)

  • return_detailed_geometry: true(デフォルト。詳細なジオメトリを戻す)またはfalse(総合的なジオメトリを戻す)

  • language: 運転方向の生成に使用する言語(ENGLISHFRENCHGERMANITALIANまたはSPANISH)

  • return_segment_edge_ids(ルートのマヌーバごとにエッジのエッジID値を戻すかどうか): trueまたはfalse(デフォルト)

  • return_route_edge_ids(ルートのエッジのエッジID値を戻すかどうか): trueまたはfalse(デフォルト)

  • return_subroute_edge_ids (各サブルートのエッジのエッジID値を戻すかどうか): trueまたはfalse (マルチアドレス・ルートの場合はデフォルト、シングルアドレス・ルートの場合は無視)

  • distance_unit: kilometermile(デフォルト)またはmeter

  • time_unit: hourminute(デフォルト)またはsecond

  • pre_geocoded_locations(出発地および目的地を、入力場所(住所指定または点)とジオコード済の場所のどちらで指定するか): true(ジオコード済の場所)またはfalse(デフォルト。入力場所)

一括ルート・リクエストの場合は、リクエストID、出発地、および1つ以上の目的地を指定する必要があります。ID属性は、場所ごとに必要です。一括ルート・リクエストでは、次の属性を1つ以上指定できます。

  • route_preference: fastestまたはshortest(デフォルト)

  • road_preference: highway(デフォルト)またはlocal

  • distance_unit: kilometermile(デフォルト)またはmeter

  • time_unit: hourminute(デフォルト)またはsecond

  • sort_by_distance(戻されるルートを、出発地から目的地までの距離で昇順にソートするかどうか): trueまたはfalse(デフォルト)

  • cutoff_distance(出発地から目的地までの距離が、指定された距離以下のルートのみを戻す): (数値。デフォルトは制限なし)

  • pre_geocoded_locations(出発地および目的地を、入力場所(住所指定または点)とジオコード済の場所のどちらで指定するか): true(ジオコード済の場所)またはfalse(デフォルト。入力場所)

この項にはさらに次の項があります。

13.3.1 ルート・リクエストおよびルート・レスポンスの例

この項では、ルート・リクエストと、そのリクエストによって生成されるルート・レスポンスのXMLの例を示します。リクエストには、指定した住所、経度と緯度の座標により指定される点、またはジオコード済の場所を使用できます。使用可能な要素と属性のリファレンス情報は、リクエストについては13.3.2項を、レスポンスについては13.3.3項を参照してください。

例13-1は、住所を指定した2つのオフィス(Massachusetts州Waltham市とNew Hampshire州Nashua市)間の最速ルート(可能な場合は、高速道路を使用)のリクエストを示しています。このリクエストでは、セグメントごとの運転方向を要求し、距離の単位にはマイル、時間の単位には分を指定しています。

例13-1 指定した住所を使用した場合のルート・リクエスト

<?xml version="1.0" standalone="yes"?>
<route_request 
          id="8" 
          route_preference="fastest"
          road_preference="highway" 
          return_driving_directions="true"
          distance_unit="mile" 
          time_unit="minute">
  <start_location>
    <input_location id="1">
      <input_address>
        <us_form1 
          street="1000 Winter St" 
          lastline="Waltham, MA" />
      </input_address>
    </input_location></start_location>
  <end_location>
    <input_location id="2">
      <input_address>
        <us_form1 
          street="1 Oracle Dr" 
          lastline="Nashua, NH" />
      </input_address>
    </input_location>
  </end_location>
</route_request>

例13-2に、例13-1のリクエストによって生成されたレスポンスを示します。(出力は、読みやすくするために変更が加えられています。)

例13-2 指定した住所を使用した場合のルート・レスポンス

<?xml version="1.0" encoding="UTF-8" ?>
<route_response>
  <route 
    id="8" 
    step_count="15" 
    distance="29.855655894643636" 
    distance_unit="mile" 
    time="34.41252848307292" 
    time_unit="minute">
  <segment 
    sequence="1" 
    instruction="Start out on WINTER ST (Going North)" 
    distance="0.6715170911787637" time="1.1257004737854004"/>
  <segment 
    sequence="2" 
    instruction="Turn SLIGHT RIGHT onto RAMP (Going Northwest)" 
    distance="0.05893317343308232" 
    time="0.09879287083943684"/>
  <segment 
    sequence="3" 
    instruction="Turn RIGHT onto OLD COUNTY RD (Going Northeast)" 
    distance="0.6890481152276999" 
    time="1.6801289876302083"/>
  <segment 
    sequence="4" 
    instruction="Turn RIGHT onto TRAPELO RD (Going Southeast)" 
    distance="1.0062739119153126" 
    time="1.686871592203776"/>
  <segment 
    sequence="5" 
    instruction="Turn LEFT onto RAMP (Going North)" 
    distance="0.3364944434303735" 
    time="0.5640838623046875"/>
  <segment 
    sequence="6" 
    instruction="Merge onto I-95/RT-128 (Going North)" 
    distance="4.775246959324318" 
    time="4.926156107584635"/>
  <segment 
    sequence="7" 
    instruction="Continue on I-95/RT-128" 
    distance="0.0" 
    time="0.0"/>
  <segment 
    sequence="8" 
    instruction="Stay STRAIGHT to go onto 32B/32A (Going East)" 
    distance="0.27138218577176415" 
    time="0.4549326578776042"/>
  <segment 
    sequence="9" 
    instruction="Take EXIT 32A toward LOWELL" 
    distance="0.043764782242279254" 
    time="0.07336527506510417"/>
  <segment 
    sequence="10" 
    instruction="Stay STRAIGHT to go onto RAMP (Going East)" 
    distance="0.2770620621155161" 
    time="0.4644541422526042"/>
  <segment 
    sequence="11" 
    instruction="Turn LEFT onto US-3 (Going Northwest)" 
    distance="20.664632308107564" 
    time="21.317686971028646"/>
  <segment 
    sequence="12" 
    instruction="Stay STRAIGHT to go onto EVERETT TPKE/US-3 (Going Northwest)" 
    distance="0.006080380444913938" 
    time="0.006272379557291667"/>
  <segment 
    sequence="13" 
    instruction="Take EXIT 1 toward SO NASHUA" 
    distance="0.550406717982974" 
    time="0.9226765950520833"/>
  <segment 
    sequence="14" 
    instruction="Turn LEFT onto SPIT BROOK RD (Going West)" 
    distance="0.5031617978313553" 
    time="1.0825419108072916"/>
  <segment 
    sequence="15" 
    instruction="Turn RIGHT onto ORACLE DR (Going North)" 
    distance="0.0016526518707758954" 
    time="0.00886537532011668"/>
  </route>
</route_response>

例13-3は、緯度/経度で指定した2点間の最速ルート(可能な場合は、高速道路を使用)のリクエストを示しています。このリクエストは、セグメントごとの運転方向を要求し、距離の単位にはメートル、時間の単位には秒を指定しています。(この2つの場所は、California州San Francisco市の、World Trade Centerと100 Flower通りに対応しています。)

例13-3 緯度/経度での点指定を使用した場合のルート・リクエスト

<?xml version="1.0" standalone="yes"?>
<route_request id="8" 
               route_preference="shortest"
               road_preference="highway" 
               return_driving_directions="true"
               distance_unit="meter" 
               time_unit="second"
               return_route_geometry="true"
          >
  <start_location>
     <input_location id="1" longitude="-122.39382" latitude="37.79518" />
  </start_location>
  <end_location>
     <input_location id="2" longitude="-122.4054826" latitude="37.7423566" />
  </end_location>
</route_request>

例13-4に、例13-3のリクエストによって生成されたレスポンスを示します。(出力は、読みやすくするために変更が加えられています。)

例13-4 緯度/経度での点指定を使用した場合のルート・レスポンス

?xml version="1.0" encoding="UTF-8" ?>
<route_response>
   <route id="8" step_count="11" distance="7196.72509765625" distance_unit="meter"
     time="521.2236328125" time_unit="second">
       <route_geometry>
         <LineString>
             <coordinates>
-122.39382,37.79518 -122.39382,37.79518 -122.39454,37.79601 -122.39467,37.79604 
-122.39476,37.79604 -122.39484,37.79599 -122.39486,37.79591 -122.39484,37.79579
-122.39462,37.79539 -122.39425,37.79491 -122.39389,37.79462 -122.39338,37.79433
-122.39326,37.79424 -122.39275,37.79384 -122.39263,37.79371 -122.39174,37.79293 
-122.39151,37.79274 -122.39142,37.79266 -122.3913,37.7925 -122.3912,37.79233 
-122.39102,37.79184 -122.39093,37.79161 -122.39072,37.79128 -122.39049,37.79104 
-122.39016,37.79076 -122.38878,37.78967 -122.38861,37.7895 -122.38839,37.7892
-122.38819,37.78877 -122.38813,37.78857 -122.38797,37.78783 -122.38796,37.78758 
-122.38801,37.78709 -122.38819,37.78478 -122.38832,37.78477 -122.38841,37.78474 
-122.38983,37.78361 -122.39127,37.78246 -122.39206,37.78184 -122.39261,37.78139 
-122.39319,37.78094 -122.3943,37.7801 -122.39486,37.77968 -122.39534,37.7793 
-122.39654,37.77833 -122.39876,37.77657 -122.39902,37.77639 -122.40033,37.77537 
-122.40096,37.77483 -122.40151,37.7744 -122.40205,37.77396 -122.40226,37.7738
 -122.40266,37.77349 -122.40321,37.77305 -122.40376,37.77262 -122.40543,37.77129 
-122.40578,37.77101 -122.40599,37.77083 -122.40699,37.77006 -122.40767,37.76953 
-122.40774,37.76947 -122.40781,37.7694 -122.40786,37.76932 -122.40788,37.76922 
-122.40788,37.76913 -122.40786,37.76897 -122.40785,37.76883 -122.40779,37.76838 
-122.40767,37.7671 -122.40756,37.76577 -122.40743,37.76449 -122.40734,37.76321 
-122.40722,37.76193 -122.40709,37.76067 -122.40695,37.75937 -122.40678,37.75776 
-122.4067,37.75684 -122.40663,37.75617 -122.40647,37.75458 -122.40644,37.75428 
-122.40632,37.75299 -122.4062,37.75174 -122.40617,37.75138 -122.40614,37.75103 
-122.40606,37.75066 -122.40565,37.74987 -122.40529,37.74937 -122.40518,37.74924 
-122.40506,37.74913 -122.4045,37.74873 -122.4041,37.74845 -122.40393,37.74827 
-122.40384,37.74815 -122.40378,37.74801 -122.40375,37.74785 -122.40381,37.74762 
-122.40397,37.74719 -122.4043,37.74633 -122.40434,37.74618 -122.40434,37.74603 
-122.40431,37.74594 -122.4042,37.74554 -122.40416,37.7453 -122.40417,37.74515 
-122.40431,37.74464 -122.40445,37.74427 -122.40461,37.74393 -122.40479,37.74362 
-122.40522,37.74304 -122.40482,37.74282 -122.40517,37.74233 
-122.40545613036156,37.742431337836386 
          </coordinates>
        </LineString>
      </route_geometry>
      <segment sequence="1" instruction="Start out on FERRY BLDG/FERRY
         PLZ/HERB CAEN WAY/THE EMBARCADERO (Going Northwest)"
         distance="111.84008026123047" time="6.990005016326904"/>
      <segment sequence="2" instruction="Turn LEFT onto RAMP (Going 
        Southwest)" distance="51.30750274658203" time="4.664318561553955"/>
      <segment sequence="3" instruction="Turn LEFT onto HERB CAEN 
         WAY/THE EMBARCADERO (Going Southeast)" 
          distance="902.3695068359375" time="56.39809036254883"/>
      <segment sequence="4" instruction="Turn SLIGHT RIGHT onto THE
         EMBARCADERO (Going Southeast)" distance="534.7628173828125"
         time="33.42267608642578"/>
      <segment sequence="5" instruction="Turn RIGHT onto BRANNAN ST 
          (Going Southwest)" distance="2454.0565185546875"
          time="219.57013702392578"/>
      <segment sequence="6" instruction="Turn SLIGHT LEFT onto POTRERO AVE
         (Going South)" distance="2066.54541015625" time="129.15908813476562"/>
      <segment sequence="7" instruction="Turn SLIGHT LEFT onto BAY SHORE 
          BLVD (Going Southeast)" distance="747.060546875"
          time="46.6912841796875"/>
      <segment sequence="8" instruction="Stay STRAIGHT to go onto BAY SHORE
         BLVD/BAYSHORE BLVD (Going South)" distance="195.7578125"
         time="12.23486328125"/>
      <segment sequence="9" instruction="Turn LEFT onto OAKDALE AVE 
         (Going Southeast)" distance="42.8857421875" time="3.898712158203125"/>
      <segment sequence="10" instruction="Turn RIGHT onto PATTERSON ST 
          (Going Southwest)" distance="62.525390625" time="5.68414306640625"/>
      <segment sequence="11" instruction="Turn RIGHT onto FLOWER ST (Going
         West)" distance="27.61372947692871" time="2.5103390216827393"/>
   </route>
</route_response>

例13-5は、運転方向付きのルート・リクエストを示しています。出発地と目的地は、Massachusetts州Boston市内の約0.5マイル離れているジオコード済の場所です。

例13-5 ジオコード済の場所を使用した場合のルート・リクエスト

<?xml version="1.0" standalone="yes"?>
<route_request id="8" 
               route_preference="shortest"
               road_preference="highway" 
               return_driving_directions="true"
               distance_unit="mile" 
               time_unit="minute"
               pre_geocoded_locations="true">
    <start_location>
        <pre_geocoded_location id="1">
            <edge_id>22161661</edge_id>
            <percent>.5</percent>
            <side>L</side>
        </pre_geocoded_location>
    </start_location>
    <end_location>
        <pre_geocoded_location id="2">
            <edge_id>22104391</edge_id>
            <percent>.5</percent>
            <side>R</side>
        </pre_geocoded_location>
    </end_location>
</route_request>

例13-6に、例13-5のリクエストに対するレスポンスを示します。(出力は、読みやすくするために変更が加えられています。)

例13-6 ジオコード済の場所を使用した場合のルート・レスポンス

<?xml version="1.0" encoding="UTF-8" ?>
<route_response>
  <route 
     id="8" 
     step_count="5" 
     distance="0.6193447379707987" 
     distance_unit="mile" 
     time="1.6662169138590495" 
     time_unit="minute">
    <segment 
       sequence="1"
       instruction="Start out on HUNTINGTON AVE (Going Southeast)" 
       distance="0.0059065276259536855" 
       time="0.01440208355585734"/>
    <segment 
       sequence="2" 
       instruction="Turn LEFT onto AVENUE OF THE ARTS/HUNTINGTON AVE/RT-9 (Going Northeast)"              distance="0.020751234891437903" 
       time="0.050598426659901934"/>
    <segment        sequence="3" 
       instruction="Turn RIGHT onto PUBLIC ALLEY 405 (Going Southeast)" 
       distance="0.053331456545578096" 
       time="0.286087703704834"/>
    <segment        sequence="4" 
       instruction="Turn RIGHT onto ST BOTOLPH ST (Going Southwest)" 
       distance="0.028921701076542888" 
       time="0.07052075068155925"/>
    <segment        sequence="5" 
       instruction="Turn RIGHT onto MASSACHUSETTS AVE (Going Northwest)" 
       distance="0.5104338249425094" 
       time="1.2446078459421794"/>
  </route>
</route_response>

13.3.2 ルート・リクエストのDTD

次に、ルート・リクエストの完全なDTDを示します。DTDの主要な要素と属性については、後続の項で説明しています。

<?xml version="1.0" encoding="UTF-8"?>
<!-- geocoder.dtd includes gmlfeature.dtd. These define the 
     ELEMENTS input_address and those in Feature, FeatureMember,
     and FeatureCollection that are used in geoFeature, 
     geoFeatureCollection, and geoFeatureMember.
-->
<!ENTITY % GEOCODERDTD SYSTEM "geocoder.dtd">
%GEOCODERDTD;
 
<!—
   input_location: specify an input address to the geocoder
   input_address: specify a location using a street address
   Point: specify a location using its longitude/latitude
 
   (The input_location, input_address and Point elements are defined in
   geocoder.dtd. GeometryClasses is defined in gmlgeometry.dtd.)
-->
<!ELEMENT route_request (start_location, location*, end_location)>
<!ATTLIST route_request 
      vendor CDATA "Oracle"
      id CDATA #REQUIRED
      route_preference (FASTEST|SHORTEST) #IMPLIED
      road_preference (HIGHWAY|LOCAL) #IMPLIED
      return_driving_directions (TRUE|FALSE) #IMPLIED
      return_hierarchival_driving_directions (TRUE|FALSE) #IMPLIED
      return_locations (TRUE|FALSE) #IMPLIED
      return_subroutes (TRUE|FALSE) #IMPLIED
      return_route_geometry (TRUE|FALSE) #IMPLIED
      return_subroute_geometry (TRUE|FALSE) #IMPLIED
      return_segment_geometry (TRUE|FALSE) #IMPLIED
      return_detailed_geometry (TRUE|FALSE) #IMPLIED
      return_route_edge_ids (TRUE|FALSE) #IMPLIED
      return_subroute_edge_ids (TRUE|FALSE) #IMPLIED
      return_route_segment_ids (TRUE|FALSE) #IMPLIED
      language (ENGLISH|FRENCH|GERMAN|ITALIAN|SPANISH) #IMPLIED
      distance_unit (KM|MILE|METER) #IMPLIED
      time_unit (HOUR|MINUTE|SECOND) #IMPLIED
      pre_geocoded_locations (TRUE|FALSE) #IMPLIED>
      driving_directions_detail (LOW|MEDIUM|HIGH) #IMPLIED
 
<!-- The following are alternatives for specifying the location. Use 
     input_location when you want to represent a location with a  
     street address (input_address) or longitude/latitude (Point).
     If you have already geocoded the location, 
     you can use information from the geocoder response to 
     construct a pre_geocoded_location element. 
     The geocoder returns:
         - An edge_id (integer that is the road segment identifier)
         - A side ('L' or 'R' – left or right side)
         - A percent (floating-point number 0.0 to 1.0 representing  
           the fraction of the length from the start of the road 
           segment to this location.
-->
<!ELEMENT pre_geocoded_location (edge_id, percent, side)>
<!ATTLIST pre_geocoded_location id CDATA #REQUIRED>
 
 
<!ELEMENT start_location (input_location|pre_geocoded_location|)>
<!ELEMENT location (input_location|pre_geocoded_location|)>
<!ELEMENT end_location (input_location|pre_geocoded_location|)>

13.3.2.1 route_request要素

<route_request>要素は、次のとおり定義されています。

<!ELEMENT route_request (start_location, location*, end_location)>

ルート・リクエストのルート要素には、常にroute_requestという名前が付けられます。

子要素の<start_location>は、住所指定、ジオコード済住所または経度/緯度座標として、ルートの出発地を示します。

子要素の<location>は、住所指定、ジオコード済住所または経度/緯度座標として、セグメントの場所を示します。<location>要素が存在しない場合はシングルアドレス・ルート、1つ以上の<location>要素が存在する場合はマルチアドレス・ルートです。

子要素の<end_location>は、住所指定、ジオコード済住所または経度/緯度座標として、ルートの目的地を示します。

ルート・リクエストでは、次のように指定します。

  • <start_location>が住所指定または経度/緯度座標である場合、各<end_location>および<location>要素には住所指定または経度/緯度座標のいずれかを使用できますが、ジオコード済住所は使用できません。

  • <start_location>がジオコード済住所である場合、<end_location>および任意の<location>指定にはジオコード済住所を使用する必要があります。

13.3.2.2 route_request属性

ルート要素の<route_request>には、複数の属性があります(そのほとんどはオプションです)。属性は、次のとおり定義されています。

<!ATTLIST route_request 
      vendor CDATA "Oracle"
      id CDATA #REQUIRED
      route_preference (FASTEST|SHORTEST) #IMPLIED
      road_preference (HIGHWAY|LOCAL) #IMPLIED
      return_driving_directions (TRUE|FALSE) #IMPLIED
      return_hierarchival_driving_directions (TRUE|FALSE) #IMPLIED
      return_locations (TRUE|FALSE) #IMPLIED
      return_subroutes (TRUE|FALSE) #IMPLIED
      return_route_geometry (TRUE|FALSE) #IMPLIED
      return_subroute_geometry (TRUE|FALSE) #IMPLIED
      return_segment_geometry (TRUE|FALSE) #IMPLIED
      return_detailed_geometry (TRUE|FALSE) #IMPLIED
      return_route_edge_ids (TRUE|FALSE) #IMPLIED
      return_subroute_edge_ids (TRUE|FALSE) #IMPLIED
      return_route_segment_ids (TRUE|FALSE) #IMPLIED
      language (ENGLISH|FRENCH|GERMAN|ITALIAN|SPANISH) #IMPLIED
      distance_unit (KM|MILE|METER) #IMPLIED
      time_unit (HOUR|MINUTE|SECOND) #IMPLIED
      pre_geocoded_locations (TRUE|FALSE) #IMPLIED>
      driving_directions_detail (LOW|MEDIUM|HIGH) #IMPLIED

vendorはオプションの属性です。デフォルト値の場合は、Oracleがルーティング・プロバイダになります。

idは必須属性で、リクエストに関連付けるID番号を指定します。

route_preferenceはオプションの属性で、予想運転時間が最短のルート(FASTEST)と、運転距離が最短のルート(SHORTEST、デフォルト)のどちらを希望するのかを示します。

road_preferenceはオプションの属性で、道路の種類が選択できる場合に、高速道路を使用するルート(HIGHWAY、デフォルト)と、地方道路(LOCAL)を使用するルートのどちらを希望するのかを示します。

return_driving_directionsはオプションの属性で、ルートの運転方向が必要かどうかを示します。TRUEを指定すると運転方向が戻され、FALSE(デフォルト)を指定すると運転方向は戻されません。

return_hierarchical_driving_directionsはオプションの属性で、開いたり閉じたりすることができる階層でルートの運転方向を戻すかどうかを示します。TRUEを指定すると運転方向が開いたり閉じたりすることができる階層で戻され、FALSE(デフォルト)を指定すると運転方向が階層なしのリストで戻されます。

return_locationsはオプションの属性で、ルートおよび任意のサブルートの出発地と目的地を戻すかどうかを指定します。TRUE (デフォルト)を指定するとこれらの場所が戻され、FALSEを指定するとこれらの場所は戻されません。

return_subroutesはオプションの属性で、マルチアドレス・ルートのサブルートを戻すかどうかを指定します。TRUE (マルチアドレス・ルートの場合はデフォルト)を指定するとサブルートが戻され、FALSEを指定するとサブルートは戻されません。(シングルアドレス・ルートの場合、この属性は無視されます。)

return_route_geometryはオプションの属性で、ルートのマヌーバを表す各線ストリングの座標が必要かどうかを示します。TRUEを指定すると座標が戻され、FALSE(デフォルト)を指定すると座標は戻されません。

return_subroute_geometryはオプションの属性で、各サブルートのマヌーバを表す各線ストリングの座標が必要かどうかを示します。TRUEを指定すると座標が戻され、FALSE (マルチアドレス・ルートの場合はデフォルト)を指定すると座標は戻されません。(シングルアドレス・ルートの場合、この属性は無視されます。)

return_segment_geometryはオプションの属性で、ルートを表す線ストリングの座標が必要かどうかを示します。TRUEを指定すると座標が戻され、FALSE(デフォルト)を指定すると座標は戻されません。return_segment_geometryTRUEの場合、return_route_geometry属性の値に関係なく、ルートの運転方向が戻されます。

return_detailed_geometryはオプションの属性で、戻されるジオメトリに含まれる詳細のレベルを示します。TRUE(デフォルト)は詳細なジオメトリを戻し、FALSEは総合的な(通常は座標の少ない)ジオメトリを戻します。

return_route_edge_idsはオプションの属性で、ルートのエッジのエッジID値が必要かどうかを示します。TRUEを指定するとエッジID値が戻され、FALSE(デフォルト)を指定するとエッジID値は戻されません。

return_subroute_edge_idsはオプションの属性で、サブルートのエッジのエッジID値が必要かどうかを示します。TRUEを指定するとエッジID値が戻され、FALSE (マルチアドレス・ルートの場合はデフォルト)を指定するとエッジID値は戻されません。(シングルアドレス・ルートの場合、この属性は無視されます。)

return_segment_edge_idsはオプションの属性で、ルートのすべてのマヌーバのエッジについてエッジID値が必要かどうかを示します。TRUEを指定するとエッジID値が戻され、FALSE(デフォルト)を指定するとエッジID値は戻されません。return_segment_edge_idsTRUEの場合、return_route_edge_ids属性の値に関係なく、エッジID値が戻されます。

languageはオプションの属性で、運転方向の生成に使用するデフォルトの言語を上書きします。デフォルトの言語はweb.xmlファイルで設定されており、この属性を使用してリクエストごとにデフォルトを上書きできます。サポートされている属性値は、ENGLISHFRENCHGERMANITALIANおよびSPANISHです。

distance_unitはオプションの属性で、戻される距離の値の測定単位を示します。有効な値は、KM(キロメートル)、MILE(マイル、デフォルト)およびMETER(メートル)です。

time_unitはオプションの属性で、戻される時間値の単位を示します。有効な値は、HOUR(時間)、MINUTE(分、デフォルト)およびSECOND(秒)です。

pre_geocoded_locationsはオプションの属性で、出発地と目的地の指定方法を示します。TRUEは、両方の場所が、<pre_geocoded_location>要素によって、ジオコード済の場所として指定されることを示します。FALSE (デフォルト)は、両方の場所が、<input_location>要素によって、住所として指定されることを示します。

driving_directions_detailはオプションの属性で、運転の案内における詳細レベルと個別のステップの数に影響を与えます。指定可能な値は、HIGH(最も詳細でステップ数が最も多い)、MEDIUM(デフォルト)およびLOW(最も大まかでステップ数が最も少ない)です。たとえば、LOWを指定すると、セグメントに右または左へのわずかなマヌーバが含まれている場合でも、1つのセグメントが1つのステップとして処理される場合があります。戻される運転方向の長さに対してこの属性の値が与える影響は、要素の正確な名前とマヌーバによって異なります。return_driving_directionsまたはreturn_hierarchical_driving_directionsに対してTRUEを指定しない場合、この属性は無視されます。


注意:

デフォルトの詳細レベルはOracle Databaseリリース11.1で変更され、以前と比べると大まかになりステップ数が減りました。driving_directions_detail属性が用意されていなかった以前のリリースと同じ詳細レベルが必要な場合は、driving_directions_detail属性にHIGHを指定します。

13.3.2.3 input_location要素

<input_location>要素は、Oracle Spatialのジオコーディング・リクエストDTD(11.7.2項を参照)に適した形式で、住所を指定します。入力場所は、<Point>要素または<input_address>要素のいずれかを使用して指定できます。13.3.1項例13-1では、<input_location>要素とその子要素の<input_address>を使用して出発地と目的地の住所が指定されています。

<input_location>要素を使用する場合は、<route_request>要素のpre_geocoded_locations属性の値をFALSE(デフォルト)に設定する必要があります。リクエストでは<Point>要素と<input_address>要素を併用できます。

13.3.2.4 pre_geocoded_location要素

<pre_geocoded_location>要素は、その住所が通り(エッジ)に沿ってどれくらい離れているのか、また、通りのどちら側にあるのかを示す、ジオコード済の場所を指定します。13.3.1項例13-5では、<pre_geocoded_location>要素を使用して出発地と目的地の住所が指定されています。

<pre_geocoded_location>要素を使用する場合は、<route_request>要素でpre_geocoded_locations="TRUE"を指定し、出発地と目的地の両方を<pre_geocoded_location>要素で指定する必要があります。

13.3.3 ルート・レスポンスのDTD

次に、ルート・レスポンスの完全なDTDを示します。

<?xml version="1.0" encoding="UTF-8"?>
<!-- route_response DTD includes the gmlgeometry DTD 
     as an external entity reference.
     -->
<!ENTITY % GMLGEOMETRYDTD SYSTEM "gmlgeometry.dtd">
  %GMLGEOMETRYDTD;
 
<!ELEMENT route_response (route | router_error)>
 
<!ELEMENT route (route_geometry?, segment+)>
<!ATTLIST route id CDATA #REQUIRED
                step_count CDATA #IMPLIED
                time CDATA #IMPLIED
                distance CDATA #IMPLIED>
           
<!ELEMENT router_error EMPTY>
<!ATTLIST router_error 
                 id CDATA #REQUIRED
                 error_code CDATA #IMPLIED 
                 error_msg CDATA #IMPLIED>
 
<!ELEMENT route_geometry (LineString | MultiLineString)?>
 
<!ELEMENT route_edge_ids (EdgeIDs)?>
 
<!ELEMENT segment segment*, (LineString | MultiLineString)?>
<!ATTLIST segment sequence CDATA #REQUIRED
                  instruction CDATA #IMPLIED
                  time CDATA #IMPLIED
                  distance CDATA #IMPLIED>
 
<!ELEMENT segment_geometry (LineString | MultiLineString)?>
 
<!ELEMENT segment_edge_ids (EdgeIDs)?>

13.3.4 一括ルート・リクエストおよび一括ルート・レスポンスの例

この項では、一括ルート・リクエストと、そのリクエストによって生成されるルート・レスポンスのXMLの例を示します。1つのリクエストでは、指定した住所を使用しています。もう1つのリクエストでは、ジオコード済の場所を使用しています。使用可能な要素と属性のリファレンス情報は、リクエストについては13.3.5項を、レスポンスについては13.3.6項を参照してください。

例13-7では、指定した住所を使用する一括ルート・リクエストを示しています。このリクエストは、Massachusetts州Waltham市にあるオフィスと3つの目的地(New Hampshire州Nashua市のオラクル社のオフィス、Massachusetts州Concord町役場、およびBoston市庁舎)との間の最速ルート(可能な場合は高速道路を使用)を求めます。このリクエストでは、戻されるルートを、出発地と目的地の距離でソートするように要求しています。また、距離が35マイルを超えるルートは戻さないようにしています。

例13-7 指定した住所を使用した場合の一括ルート・リクエスト

<?xml version="1.0" standalone="yes"?>
<batch_route_request 
          id="8" 
          route_preference="fastest"
          road_preference="highway" 
          return_driving_directions="false"
          sort_by_distance = "true" 
          cutoff_distance="35" 
          distance_unit="mile" 
          time_unit="minute">
  <start_location>
    <input_location 
          id="1">
      <input_address>
        <us_form1 
          street="1000 Winter St" 
          lastline="Waltham, MA" />
      </input_address>
    </input_location>
  </start_location>
  <end_location>
    <input_location id="10">
      <input_address>
        <us_form1 
          street="1 Oracle Dr" 
          lastline="Nashua, NH" />
      </input_address>
    </input_location>
  </end_location>
  <end_location>
    <input_location 
          id="11">
      <input_address>
        <us_form1 
          street="22 Monument Sq" 
          lastline="Concord, MA" />
      </input_address>
    </input_location>
  </end_location>
  <end_location>
    <input_location 
          id="12">
      <input_address>
        <us_form1 
          street="1 City Hall Plaza" 
          lastline="Boston, MA" />
      </input_address>
    </input_location>
  </end_location>
</batch_route_request>

例13-8に、例13-7のリクエストによって生成されたレスポンスを示します。(出力は、読みやすくするために変更が加えられています。)

例13-8 指定した住所を使用した場合の一括ルート・レスポンス

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<batch_route_response 
      id="8">
  <route 
    id="11" 
    step_count="0" 
    distance="6.637544152543032" 
    distance_unit="mile" 
    time="10.53597412109375" 
    time_unit="minute" />
  <route 
    id="12" 
    step_count="0" 
    distance="17.204805418116575" 
    distance_unit="mile"
    time="24.47645467122396" 
    time_unit="minute" />
  <route 
    id="10" 
    step_count="0" 
    distance="29.855655894643636" 
    distance_unit="mile" 
    time="34.41252848307292" 
    time_unit="minute" />
</batch_route_response>

例13-9は、ジオコード済の場所を使用する一括ルート・リクエストを示しています。このリクエストは、可能であれば高速道路を使用し、ある場所と他の3つの場所の間の最短ルートを求めます。距離にはマイル、時間には分を指定しています。このリクエストでは、戻されるルートを、出発地と目的地の距離でソートするように要求しています。また、距離が50マイルを超えるルートは戻さないようにしています。

例13-9 ジオコード済の場所を使用した場合の一括ルート・リクエスト

<?xml version="1.0" standalone="yes"?>
<batch_route_request id="8" 
                     route_preference="shortest"
                     road_preference="highway" 
                     return_driving_directions="false"
                     distance_unit="mile" 
                     time_unit="minute"
                     pre_geocoded_locations="true"
                     cutoff_distance="50"
                     sort_by_distance="true">
    <start_location>
        <pre_geocoded_location id="1">
            <edge_id>22161661</edge_id>
            <percent>.5</percent>
            <side>L</side>
        </pre_geocoded_location>
    </start_location>
    <end_location>
        <pre_geocoded_location id="2">
            <edge_id>22104391</edge_id>
            <percent>.5</percent>
            <side>R</side>
        </pre_geocoded_location>
    </end_location>
    <end_location>
        <pre_geocoded_location id="3">
            <edge_id>22160808</edge_id>
            <percent>.5</percent>
            <side>L</side>
        </pre_geocoded_location>
    </end_location>
    <end_location>
        <pre_geocoded_location id="4">
            <edge_id>22325991</edge_id>
            <percent>.5</percent>
            <side>R</side>
        </pre_geocoded_location>
    </end_location>
</batch_route_request>

例13-10に、例13-9のリクエストに対するレスポンスを示します。3番目のルートは、指定したカットオフ距離の50マイルよりも長いため、2つのルートのみが戻されます。(出力は、読みやすくするために変更が加えられています。)

例13-10 ジオコード済の場所を使用した場合の一括ルート・レスポンス

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<batch_route_response 
      id="8">
  <route
    id="2" 
    step_count="0" 
    distance="0.6193447379707987" 
    distance_unit="mile" 
    time="1.6662169138590495" 
    time_unit="minute" />
  <route 
    id="4" 
    step_count="0" 
    distance="41.342018851363946" 
    distance_unit="mile" 
    time="47.95714518229167" 
    time_unit="minute" />
</batch_route_response>

13.3.5 一括ルート・リクエストのDTD

次に、一括ルート・リクエストの完全なDTDを示します。DTDの主要な要素と属性については、後続の項で説明しています。

<!ENTITY % GEOCODERDTD SYSTEM "geocoder.dtd">
%GEOCODERDTD;
<!-- input_location element is defined in geocoder.dtd -->
 
<!ELEMENT batch_route_request (start_location, end_location+)>
 <!ATTLIST batch_route_request
      vendor CDATA "Oracle"
      id CDATA #REQUIRED
      route_preference (FASTEST | SHORTEST ) #IMPLIED
      road_preference (HIGHWAY | LOCAL) #IMPLIED
      distance_unit (KM | MILE | METER ) #IMPLIED
      time_unit (HOUR | MINUTE | SECOND) #IMPLIED
      sort_by_distance (TRUE | FALSE) #IMPLIED
      cutoff_distance CDATA #IMPLIED>
          
<!-- The following are alternatives for specifying the location. Use 
     input_location when you want to represent a location with a  
     street address (input_address) or by longitude/latitude (Point).
     If you have already geocoded the location, 
     you can use information from the geocoder response to  
     construct a pre_geocoded_location element. 
     The geocoder returns:
         - an edge_id (integer that is the road segment identifier)
         - a side ('L' or 'R' – left or right side)
         - a percent (floating-point number 0.0 to 1.0 representing  
           the fraction of the length from the start of the road 
           segment to this location.
-->
<!ELEMENT pre_geocoded_location (edge_id, percent, side)>
<!ATTLIST pre_geocoded_location id CDATA #REQUIRED>
 
<!ELEMENT start_location (input_location|pre_geocoded_location)>
<!ELEMENT end_location (input_location|pre_geocoded_location)>
<!-- IMPORTANT VALIDITY CONSTRAINT: each of the input_location
     elements that are children of end_location MUST contain
     the id attribute.  Normally, the id attribute is optional.
     If an id is not present, an exception will result.
     Also, each id must be unique within a batch_route_request.
     Otherwise, the request will yield unpredictable results.
-->

13.3.5.1 batch_route_request要素

<batch_route_request>要素は、次のとおり定義されています。

<!ELEMENT batch_route_request (start_location, end_location+)>

一括ルート・リクエストのルート要素には、常にbatch_route_requestという名前が付けられます。

子要素の<start_location>は、住所指定、ジオコード済住所または経度/緯度の点として、ルートの出発地を示します。

1つ以上ある子要素の<end_location>は、それぞれが、住所指定、ジオコード済住所または経度/緯度の点として、ルートの目的地を示します。

13.3.5.2 batch_route_request属性

ルート要素<batch_route_request>には、複数の属性があります(そのほとんどはオプションです)。属性は、次のとおり定義されています。

<!ATTLIST batch_route_request 
      vendor CDATA "Oracle"
      id CDATA #REQUIRED
      route_preference (FASTEST|SHORTEST) #IMPLIED
      road_preference (HIGHWAY|LOCAL) #IMPLIED
      distance_unit (KM|MILE|METER) #IMPLIED
      time_unit (HOUR|MINUTE|SECOND) #IMPLIED
      sort_by_distance (TRUE | FALSE) #IMPLIED
      cutoff_distance CDATA #IMPLIED>
      pre_geocoded_locations (TRUE|FALSE) #IMPLIED>
 

<batch_route_request>のほとんどの属性は、<route_request>の属性と同じ意味を持ちます(13.3.5.2項を参照)。また、sort_by_distance属性およびcutoff_distance属性は、単一ルートのリクエストには適用されません。

sort_by_distanceはオプションの属性で、戻されるルートを、出発地から目的地までの距離で昇順にソートするかどうかを示します。TRUEを指定すると距離でソートされたルートが戻され、FALSE(デフォルト)を指定するとソートは行われません。

cutoff_distanceはオプションの属性で、この属性を指定すると、出発地から目的地までの距離が、指定した距離以下のルートのみが戻されます。デフォルトでは、すべてのルートが戻されます。


注意:

距離がcutoff_distanceの指定値以下でも、レスポンスに<router_error>要素(13.3.6項を参照)を生成するようなルートは、レスポンスから除外され表示されません。

13.3.6 一括ルート・レスポンスのDTD

次に、一括ルート・レスポンスの完全なDTDを示します。

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT batch_route_response (route | route_error)+ >
<!ATTLIST batch_route_response id CDATA #REQUIRED>
<!ELEMENT route EMPTY>
<!ATTLIST route 
       id CDATA #REQUIRED
       step_count CDATA #IMPLIED
       distance CDATA #IMPLIED
       distance_unit CDATA #IMPLIED
       time CDATA #IMPLIED
       time_unit CDATA #IMPLIED>
<!ELEMENT router_error EMPTY>
<!ATTLIST router_error 
       id CDATA #REQUIRED
       error_code CDATA #IMPLIED
       error_msg CDATA #IMPLIED>

13.4 ルーティング・エンジンで使用されるデータ構造

ルーティング・エンジンを使用する各データベース・ユーザーは、各自のスキーマに次の表を持っている必要があります。

  • EDGE

  • NODE

  • PARTITION

  • SIGN_POST

EDGE表およびNODE表には、ルーティング・エンジンで使用する街路ネットワークに関するエッジおよびノードの情報が格納されます。街路ネットワークの通りセグメント、交差点およびその他のエンティティを、エッジおよびノードを使用して表現する方法を理解するには、Oracle Spatialネットワーク・データ・モデル(『Oracle Spatialトポロジおよびネットワーク・データ・モデル開発者ガイド』を参照)を熟知している必要があります。

これ以降の項では、ルーティング・エンジンで使用する表について、表名のアルファベット順に説明します。

13.4.1 EDGE表

EDGE表には、街路ネットワークの方向付きエッジごとに1つの行が含まれます。それぞれの通りセグメント(2つのノード間の道路の一部)は、方向のないエッジで、EDGE表内の1つ以上の方向付きエッジに対応します。このEDGE表に含まれる列を、表13-1に示します。

表13-1 EDGE表

列名 データ型 説明

EDGE_ID

NUMBER

エッジID番号です。

START_NODE_ID

NUMBER

このエッジの開始ノードのノードID番号です。

END_NODE_ID

NUMBER

このエッジの終了ノードのノードID番号です。

PARTITION_ID

NUMBER

このエッジが含まれるネットワーク・パーティションのパーティションID番号です。

FUNC_CLASS

NUMBER

1から5の数字で表す道路機能クラスです。1は大規模で交通量が多い高速道路を示し、通常、数字が大きくなるに従って、規模、走行速度および交通量が小さくなります。クラス2の道路は安定した速度が維持され、クラス1の道路へのアクセスに使用されます。クラス3の道路は交通量が多く、クラス2の道路への接続に使用されます。クラス4の道路は、近隣の地区の間の輸送に使用されます(たとえば、交通量が多い市内の主要道など)。クラス5の道路は、その他のすべての道路です(たとえば、郊外の小規模な交通量の少ない通りなど)。

LENGTH

NUMBER

このエッジの長さ(m)です。

SPEED_LIMIT

NUMBER

このエッジに割り当てられた制限速度(m/s)です。

GEOMETRY

SDO_GEOMETRY

このエッジを表す線ストリング・ジオメトリです(座標は、開始ノードから終了ノードの順に並びます)。

NAME

VARCHAR2(128)

このエッジの名前です。

DIVIDER

VARCHAR2(1)

値がNの場合は、エッジが分割されていないことを示します。他の値は、分割されたエッジ上の回転を許容するかどうか、許容する場合はその場所および方法を示します。(現在のルーティング・エンジンでは、エッジが分割されているかどうかのみを考慮しています。)


13.4.2 NODE表

NODE表には、街路ネットワーク内の1つ以上のエッジの開始ノードまたは終了ノードごとに1つの行が含まれます。ノードは、ほとんどの場合、交差点(2つのエッジの交差部分)に対応しますが、交差点と無関係な場合もあります(たとえば、袋小路や行き止まりの通りの終点など)。このNODE表に含まれる列を、表13-2に示します。

表13-2 NODE表

列名 データ型 説明

NODE_ID

NUMBER

ノードID番号です。

GEOMETRY

SDO_GEOMETRY

このノードを表す点ジオメトリです。

PARTITION_ID

NUMBER

このノードが含まれるネットワーク・パーティションのパーティションID番号です。


13.4.3 PARTITION表

PARTITION表は、EDGE表とNODE表の内容に基づいて、Oracleによって生成されます。このPARTITION表に含まれる列を、表13-3に示します。

表13-3 PARTITION表

列名 データ型 説明

PARTITION_ID

NUMBER

パーティションID番号です。

SUBNETWORK

BLOB

このパーティションに含まれているネットワークの一部です。

NUM_NODES

NUMBER

このパーティションのノード数です。

NUM_NON_BOUNDARY_EDGES

NUMBER

このパーティション内のエッジであり、このパーティションに完全に含まれるエッジの数です。

NUM_OUTGOING_BOUNDARY_EDGES

NUMBER

このパーティション内のエッジであり、開始点がこのパーティションで、終了点が別のパーティションであるエッジの数です。(1つのエッジが2つを超えるパーティションにまたがることはできません。たとえば、あるパーティションを起点とするエッジが、2番目のパーティションを通過して3番目のパーティションで終了することはできません。)

NUM_INCOMING_BOUNDARY_EDGES

NUMBER

このパーティション内のエッジであり、開始点が別のパーティションで、終了点がこのパーティションであるエッジの数です。(1つのエッジが2つを超えるパーティションにまたがることはできません。たとえば、あるパーティションを起点とするエッジが、2番目のパーティションを通過して3番目のパーティションで終了することはできません。)


13.4.4 SIGN_POST表

SIGN_POST表には、運転方向の生成に使用する標識情報が格納されます。たとえば、ある標識は、US Route 3 South上のExit 33AがWinchesterに向かうことを示すことができます。SIGN_POSTの行は、高速道路の出口ランプの物理的な標識に対応させることができますが、必ずしも物理的な標識に対応させる必要はありません。SIGN_POST表に含まれる列を、表13-4に示します。

表13-4 SIGN_POST表

列名 データ型 説明

FROM_EDGE_ID

NUMBER

この標識が適用されるエッジのエッジID番号です(たとえば、出口ランプが含まれる通りセグメント)。

TO_EDGE_ID

NUMBER

この標識が指す先のエッジのエッジID番号です(たとえば、出口ランプの先にある通りセグメント)。

RAMP

VARCHAR2(64)

ランプのテキストです(たとえば、US-3 SOUTH)。

EXIT

VARCHAR2(8)

出口番号です(たとえば、33A)。

TOWARD

VARCHAR2(64)

出口の先にある場所を示すテキストです(たとえば、WINCHESTER)。