Spatialのルーティング・エンジンを使用すると、次の情報を提供するXMLベースのWebサービスをホストできます。
個々のルート・リクエスト(出発地と目的地)の場合: 2点間のルート情報(運転距離、予想運転時間および運転方向)。
一括ルート・リクエスト(出発地が同じで目的地が異なる複数のルート)の場合: 各ルートのルート情報(運転距離、予想運転時間)。
いずれのリクエストの場合も、出発地および目的地は、住所、ジオコード結果または経度/緯度座標によって識別されます。
ルーティング・エンジンは、Java 2 Enterprise Edition(J2EE)のWebアプリケーションとして実装され、Oracle Application ServerまたはスタンドアロンのOracle Application Server Containers for J2EE(OC4J)環境のいずれかにデプロイできます。
図13-1に、ルーティング・エンジンを使用する基本的なアクション・フローを示します。クライアントは、リモートのルーティング・エンジン・インスタンスを探してルート・リクエストを送信し、ルーティング・エンジン・インスタンスから戻されたルート・レスポンスを処理します。
この章の内容は次のとおりです。
ルーティング・リクエストの処理およびレスポンスの生成を行うために、ルーティング・エンジンを有効にするには、OC4JまたはOracle Application Serverを使用してrouteserver.ear
ファイルをデプロイする必要があります。ここでは、基本的な手順を示します。
次の要素を、OC4Jの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" />
Oracle Application Serverコンソールを使用して、routeserver.ear
ファイルをデプロイするか、または次の要素をOC4Jのserver.xml
ファイルの<application-server>
要素内に追加します(これに応じて、<ROUTE_SERVER_HOME>
を置換します)。
<application name="routeserver" path="<ROUTE_SERVER_HOME>/routeserver.ear" auto-start="true" />
次の要素を、OC4Jのserver.xml
ファイルの<application-server>
要素内に追加します。
<max-http-connections value="10" />
Oracle Route Serverがjava.lang.OutOfMemoryError
エラーを発生することなく、常に処理できる同時リクエスト数を制限することは重要です。
web.xml
ファイルを構成します(13.1.1項を参照)。
次のコマンド・オプションを使用して、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.xml のpartition_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
次の書式で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を再起動して、デプロイメントを確認します。
提示される例を参照します。http://<hostname>:<port>/routeserver/
のページには、テスト・サンプルというセクションの下部にリンクがあります。これらの例では、Oracle Route Serverの様々な機能を実例を使用して説明します。これは、XML API(13.2項を参照)の学習に適しています。
多くの場合(特に、古いweb.xml
ファイルの設定を使用する場合や、言語を指定したり長いID値を使用する場合)、Spatialに含まれているデフォルトのweb.xml
ファイルの一部を変更する必要があります。特に編集または追加する必要があると考えられるパラメータを次に示します。
routeserver_schema_jdbc_connect_string
: ルーティング・データを含むデータベースへの接続文字列。
routeserver_schema_username
: Oracleのルーティング・データにアクセスするために作成されたユーザーの名前。
routeserver_schema_password
: Oracleのルーティング・データにアクセスするために作成されたユーザーのパスワード。パスワードを不明瞭にするには、パスワード文字列の前に感嘆符(!
)を配置します。この処理を行うと、パスワードが不明瞭化され、次にルーティング・エンジンを起動するとweb.xml
ファイルが再書込みされます。
geocoder_type
: 使用されるジオコーダのタイプ。HTTPクライアントまたはThinクライアントに対して、それぞれhttpclient
またはthinclient
を指定します。
このパラメータの値に応じて、web.xml
ファイルのHTTPクライアントまたはThinクライアントのセクションの設定が確認され、必要に応じて編集されます。たとえば、thinclientを指定している場合、routeserver_schema_password
パラメータを使用する場合と同じ方法でOracle Geocoderのパスワードを不明瞭化できます。
log_filename
: ログ・ファイルの場所と名前。
driving_side
: 交通が右側通行の場合はR(デフォルト)、交通が左側通行の場合はL。
language
: 運転方向の生成に使用するデフォルトの言語。サポートされている言語は英語(デフォルト)、フランス語、ドイツ語、イタリア語およびスペイン語です。
long_ids
: TRUE
(デフォルト)を指定すると、ID値の長さがINTEGERではなくLONGデータとして格納されます。FALSE
を指定すると、ID値の長さがLONGではなくINTEGERデータとして格納されます。
リリース11.1より前のOracle Databaseを使用してパーティション化されているルーティング・データを使用する場合は、現行のリリースを使用してデータを再パーティション化するまで、long_ids
パラメータ値をFALSE
に設定する必要があります。
local_road_threshold
: マイル数(デフォルト値は25、最小値は10)。ソース・ノードと宛先ノード間の予想距離(マイル)がこの値以下である場合、地方道路はオプションとして考慮され、予想距離がこの値より大きい場合、地方道路は考慮されません。
このパラメータによって、短ルートのための最適化が有効になります。値を小さくすると、検索対象となるソリューション・セットのサイズが小さくなるため、ルーティング・エンジンのパフォーマンスを向上できます。ただし、ルーティング・エンジンは通行可能な地方道路のルートを考慮しないため、最適化されていない短ルートが生成される可能性があります。値を(デフォルト値の25より)大きくすると、地方道路を使用したより正確なルートを生成できます。ただし、検索対象のソリューション・セットのサイズが大きくなるため、ルーティング・エンジンのパフォーマンスが低下する可能性があります。
この項では、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_route_geometry
(ルートの線ストリングの座標を戻すかどうか): true
またはfalse
(デフォルト)
return_segment_geometry
(ルートのマヌーバごとに線ストリングの座標を戻すかどうか): true
またはfalse
(デフォルト)
return_detailed_geometry
: true
(デフォルト。詳細なジオメトリを戻す)またはfalse
(総合的なジオメトリを戻す)
language
: 運転方向の生成に使用する言語(ENGLISH
、FRENCH
、GERMAN
、ITALIAN
またはSPANISH
)
return_segment_edge_ids
(ルートのマヌーバごとにエッジのエッジID値を戻すかどうか): true
またはfalse
(デフォルト)
return_route_edge_ids
(ルートのエッジのエッジID値を戻すかどうか): true
またはfalse
(デフォルト)
distance_unit
: kilometer
、mile
(デフォルト)またはmeter
time_unit
: hour
、minute
(デフォルト)またはsecond
pre_geocoded_locations
(出発地および目的地を、入力場所(住所指定または点)とジオコード済の場所のどちらで指定するか): true
(ジオコード済の場所)またはfalse
(デフォルト。入力場所)
一括ルート・リクエストの場合は、リクエストID、出発地、および1つ以上の目的地を指定する必要があります。ID属性は、場所ごとに必要です。一括ルート・リクエストでは、次の属性を1つ以上指定できます。
route_preference
: fastest
またはshortest
(デフォルト)
road_preference
: highway
(デフォルト)またはlocal
distance_unit
: kilometer
、mile
(デフォルト)またはmeter
time_unit
: hour
、minute
(デフォルト)またはsecond
sort_by_distance
(戻されるルートを、出発地から目的地までの距離で昇順にソートするかどうか): true
またはfalse
(デフォルト)
cutoff_distance
(出発地から目的地までの距離が、指定された距離以下のルートのみを戻す): (数値。デフォルトは制限なし)
pre_geocoded_locations
(出発地および目的地を、入力場所(住所指定または点)とジオコード済の場所のどちらで指定するか): true
(ジオコード済の場所)またはfalse
(デフォルト。入力場所)
この項にはさらに次の項があります。
この項では、ルート・リクエストと、そのリクエストによって生成されるルート・レスポンスのXMLの例を示します。1つ目のリクエストでは、指定した住所を使用しています。次のリクエストでは、緯度/経度の座標で指定した点を使用しています。その次のリクエストでは、ジオコード済の場所を使用しています。使用可能な要素と属性のリファレンス情報は、リクエストについては13.2.2項を、レスポンスについては13.2.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>
次に、ルート・リクエストの完全な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, 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_route_geometry (TRUE│FALSE) #IMPLIED return_segment_geometry (TRUE│FALSE) #IMPLIED return_detailed_geometry (TRUE│FALSE) #IMPLIED return_route_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> <!-- 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 end_location (input_location│pre_geocoded_location│)>
<route_request>
要素は、次のとおり定義されています。
<!ELEMENT route_request (start_location, end_location)>
ルート・リクエストのルート要素には、常にroute_request
という名前が付けられます。
子要素の<start_location>
は、住所指定、ジオコード済住所または経度/緯度座標として、ルートの出発地を示します。
子要素の<end_location>
は、住所指定、ジオコード済住所または経度/緯度座標として、ルートの目的地を示します。
ルート・リクエストでは、次のように指定します。
<start_location>
が住所指定または経度/緯度座標である場合、<end_location>
には住所指定または経度/緯度座標のいずれかを使用できますが、ジオコード済住所は使用できません。
<start_location>
がジオコード済住所である場合、<end_location>
にはジオコード済住所を使用する必要があります。
ルート要素の<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_hierarchical_driving_directions (TRUE│FALSE) #IMPLIED return_route_geometry (TRUE│FALSE) #IMPLIED return_segment_geometry (TRUE│FALSE) #IMPLIED return_detailed_geometry (TRUE│FALSE) #IMPLIED return_route_edge_ids (TRUE│FALSE) #IMPLIED return_segment_edge_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_route_geometry
はオプションの属性で、ルートのマヌーバを表す各線ストリングの座標が必要かどうかを示します。TRUE
を指定すると座標が戻され、FALSE
(デフォルト)を指定すると座標は戻されません。
return_segment_geometry
はオプションの属性で、ルートを表す線ストリングの座標が必要かどうかを示します。TRUE
を指定すると座標が戻され、FALSE
(デフォルト)を指定すると座標は戻されません。return_segment_geometry
がTRUE
の場合、return_route_geometry
属性の値に関係なく、ルートの運転方向が戻されます。
return_detailed_geometry
はオプションの属性で、戻されるジオメトリに含まれる詳細のレベルを示します。TRUE
(デフォルト)は詳細なジオメトリを戻し、FALSE
は総合的な(通常は座標の少ない)ジオメトリを戻します。
return_route_edge_ids
はオプションの属性で、ルートのエッジのエッジID値が必要かどうかを示します。TRUE
を指定するとエッジID値が戻され、FALSE
(デフォルト)を指定するとエッジID値は戻されません。
return_segment_edge_ids
はオプションの属性で、ルートのすべてのマヌーバのエッジについてエッジID値が必要かどうかを示します。TRUE
を指定するとエッジID値が戻され、FALSE
(デフォルト)を指定するとエッジID値は戻されません。return_segment_edge_ids
がTRUE
の場合、return_route_edge_ids
属性の値に関係なく、エッジID値が戻されます。
language
はオプションの属性で、運転方向の生成に使用するデフォルトの言語を上書きします。デフォルトの言語はweb.xml
ファイルで設定されており、この属性を使用してリクエストごとにデフォルトを上書きできます。サポートされている属性値は、ENGLISH
、FRENCH
、GERMAN
、ITALIAN
および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 を指定します。 |
<input_location>
要素は、Oracle Spatialのジオコーディング・リクエストDTD(11.7.2項を参照)に適した形式で、住所を指定します。入力場所は、<Point>
要素または<input_address>
要素のいずれかを使用して指定できます。13.2.1項の例13-1では、<input_location>
要素とその子要素の<input_address>
を使用して出発地と目的地の住所が指定されています。
<input_location>
要素を使用する場合は、<route_request>
要素のpre_geocoded_locations
属性の値をFALSE
(デフォルト)に設定する必要があります。リクエストでは<Point>
要素と<input_address>
要素を併用できます。
<pre_geocoded_location>
要素は、その住所が通り(エッジ)に沿ってどれくらい離れているのか、また、通りのどちら側にあるのかを示す、ジオコード済の場所を指定します。13.2.1項の例13-5では、<pre_geocoded_location>
要素を使用して出発地と目的地の住所が指定されています。
<pre_geocoded_location>
要素を使用する場合は、<route_request>
要素でpre_geocoded_locations="TRUE"
を指定し、出発地と目的地の両方を<pre_geocoded_location>
要素で指定する必要があります。
次に、ルート・レスポンスの完全な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)?>
この項では、一括ルート・リクエストと、そのリクエストによって生成されるルート・レスポンスのXMLの例を示します。1つのリクエストでは、指定した住所を使用しています。もう1つのリクエストでは、ジオコード済の場所を使用しています。使用可能な要素と属性のリファレンス情報は、リクエストについては13.2.5項を、レスポンスについては13.2.6項を参照してください。
例13-7では、指定した住所を使用する一括ルート・リクエストを示しています。このリクエストは、Massachusetts州Waltham市にあるオフィスと3つの目的地(New Hampshire州Nashua市のOracleオフィス、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>
次に、一括ルート・リクエストの完全な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. -->
<batch_route_request>
要素は、次のとおり定義されています。
<!ELEMENT batch_route_request (start_location, end_location+)>
一括ルート・リクエストのルート要素には、常にbatch_route_request
という名前が付けられます。
子要素の<start_location>
は、住所指定、ジオコード済住所または経度/緯度の点として、ルートの出発地を示します。
1つ以上ある子要素の<end_location>
は、それぞれが、住所指定、ジオコード済住所または経度/緯度の点として、ルートの目的地を示します。
ルート要素<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.2.5.2項を参照)。また、sort_by_distance
属性およびcutoff_distance
属性は、単一ルートのリクエストには適用されません。
sort_by_distance
はオプションの属性で、戻されるルートを、出発地から目的地までの距離で昇順にソートするかどうかを示します。TRUE
を指定すると距離でソートされたルートが戻され、FALSE
(デフォルト)を指定するとソートは行われません。
cutoff_distance
はオプションの属性で、この属性を指定すると、出発地から目的地までの距離が、指定した距離以下のルートのみが戻されます。デフォルトでは、すべてのルートが戻されます。
次に、一括ルート・レスポンスの完全な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>
ルーティング・エンジンを使用する各データベース・ユーザーは、各自のスキーマに次の表を持っている必要があります。
EDGE
NODE
PARTITION
SIGN_POST
EDGE表およびNODE表には、ルーティング・エンジンで使用する街路ネットワークに関するエッジおよびノードの情報が格納されます。街路ネットワークの通りセグメント、交差点およびその他のエンティティを、エッジおよびノードを使用して表現する方法を理解するには、Oracle Spatialネットワーク・データ・モデル(『Oracle Spatialトポロジおよびネットワーク・データ・モデル開発者ガイド』を参照)を熟知している必要があります。
これ以降の項では、ルーティング・エンジンで使用する表について、表名のアルファベット順に説明します。
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) |
値が |
NODE表には、街路ネットワーク内の1つ以上のエッジの開始ノードまたは終了ノードごとに1つの行が含まれます。ノードは、ほとんどの場合、交差点(2つのエッジの交差部分)に対応しますが、交差点と無関係な場合もあります(たとえば、袋小路や行き止まりの通りの終点など)。このNODE表に含まれる列を、表13-2に示します。
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番目のパーティションで終了することはできません。) |
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) |
ランプのテキストです(たとえば、 |
EXIT |
VARCHAR2(8) |
出口番号です(たとえば、 |
TOWARD |
VARCHAR2(64) |
出口の先にある場所を示すテキストです(たとえば、 |