3.1 マップ・ビジュアライゼーション・コンポーネント・マップ・データ・サーバー

マップ・ビジュアライゼーション・コンポーネント・マップ・データ・サーバーは、データベースからクライアントへのライブ・データのストリーミング・サービスを提供します。

このデータは、Oracle Maps JavaScript APIクライアントで利用できます。また、API編集ユーティリティで編集することもできます。さらに、データ同期タスクを処理するための、中間層コンポーネントとして使用されることもあります。

最も簡単に説明すると、クライアントはテーマの名前とオプションの枠ボックスを指定したリクエストをマップ・データ・サーバーに送信します。サーバーは、圧縮されたGeoJSON形式でライブ・データを返します(このデータには、ジオメトリと属性の両方が含まれています)。

3.1.1 ドメインとマップ・データ・サーバーURLのパターン

マップ・データ・サーバーは、複数のドメインを使用します。それぞれのドメインが1つのマップ・ビジュアライゼーション・コンポーネント・データソースに対応します。たとえば、mvdemoデータソースからのデータをリクエストするには、URLが次のパターンに従っている必要があります。

http://example.com:8080/mapviewer/dataserver/mvdemo?

このURLリクエストでは、/dataserverがマップ・データ・サーバーを表しています。/mvdemoは、このリクエストが、どのドメインまたはデータソースに向けられているかを示しています。URLリクエストの残りの部分で、明示的にデータソースを指定する必要はありません。このURLパターンには、保護の観点からの柔軟性があります。ユーザーやWeb管理者は、そのようなURLパターンを使用して、簡単に様々なドメインに様々な保護のレベルを設定できます。

サポートされているHTTPリクエスト・パラメータの完全なリストについてのクイック・ヘルプを取得するには、helpパラメータを含んでいるリクエストを発行します。次に例を示します。

http://example:8080/mapviewer/dataserver/mvdemo?help=true

この例により、サポートされているパラメータのリストが返されます。(/mvdemoパスは、このヘルプ・リクエストの場合にも必要とされます)。

3.1.2 マップ・データ・サーバー・リクエストのパラメータ

データを取得するマップ・データ・サーバー・リクエストでは、URLに適切な問合せパラメータが含まれている必要があります。データは、マップ・ビジュアライゼーション・コンポーネントの事前定義済ジオメトリ・テーマかJDBCテーマからのものになります。

3.1.2.1 事前定義済ジオメトリ・テーマからのデータの取得

事前定義済ジオメトリ・テーマからデータを取得する前に、事前定義済ジオメトリ・テーマが適切に定義されていることを確認してください。適切に定義されていない場合、その定義を変更するか、適切な定義で新しい事前定義済ジオメトリ・テーマを作成してください。

空間表のジオメトリ列の他に、アプリケーションの属性列も必要な場合、ジオメトリ・テーマのSTYLING_RULESには、必要な属性を定義するために<hidden_info>要素が必要です。たとえば、空間表を表すためにアプリケーションにジオメトリ・テーマ(CUSTOMERSなど)が必要で、各顧客の名前、都市および売上高も必要な場合、STYLING_RULESは、次のようになります。

SQL> select STYLING_RULES from user_sdo_themes where name='CUSTOMERS';
 
STYLING_RULES
--------------------------------------------------------------------------------
<?xml version="1.0" standalone="yes"?>
<styling_rules>
  <hidden_info>
    <field column="name" name="Name"/>
    <field column="city" name="City"/>
    <field column="sales" name="Sales"/>
  </hidden_info>
  <rule>
    <features style="M.STOPLIGHT_RED"> </features>
  </rule>
</styling_rules>

マップ・ビジュアライザ・ユーティリティは、ジオメトリ・テーマを変更または作成するための推奨ツールです。

事前定義済ジオメトリ・テーマでのスタイリング・ルールの使用の詳細は、「事前定義済空間ジオメトリ・テーマのスタイリング・ルール」を参照してください。

次のパラメータは、マップ・ビジュアライゼーション・コンポーネントの事前定義済ジオメトリ・テーマからデータを取得するマップ・データ・サーバー・リクエストに使用できます。t (テーマ名)パラメータは必須ですが、その他のパラメータはオプションです。

  • t: テーマの名前。

  • bbox: バウンディング・ボックス。minx,miny,maxx,maxyのカンマ区切りリストにする必要があります。

  • to_srid: データを返すためのSRID (空間参照システム)。

  • bbox_srid: データのネイティブSRIDとは異なる場合の枠ボックスのSRID (空間参照システム)。

  • seq: シーケンスID。マルチパート形式でデータを取得するときに使用します。

  • dadp: 小数点以下の桁数。返されるデータの座標系に対する小数点以下の最大桁数です。

  • include_style_info: それぞれの地物にスタイリング情報(レンダリング/ラベリング・スタイル名、および関連する列)を含めるかどうかを決定します。(デフォルト値はtrueです。)

  • include_label_box: 各ポリゴン地物にラベル・ボックスを含めるかどうかを決定します。(デフォルト値はtrueです。)ラベル・ボックスは、ポリゴンに収まる最大付近の矩形です。この矩形の内側に配置されるラベルは、ポリゴン地物に完全に収まるように生成されます。このパラメータは、ポリゴン以外の地物に対しては無視されます。

  • simplify:ジオメトリを簡略化するかどうかを決定します。(デフォルトはfalseです)

  • threshold: simplifytrueの場合、thresholdは、単純化の際に削除される入力ジオメトリからの頂点の近似割合を制御します。(1から99までの数にする必要があります)たとえば、値が10の場合、比較的少数(約10%)の頂点が削除されて大部分(約90%)が保持されます。一方、値が90の場合は、頂点の約90%が消去されます(約10%のみ保持されます)。

次に例を示します

すべてのデータをCITIES表から3857 SRIDで取得するには:

http://example:8080/mapviewer/dataserver/mvdemo?t=theme_demo_cities&to_srid=3857

指定したbboxに接触するすべてのデータをCITIES表から3857 SRIDで取得するには:

http://example:8080/mapviewer/dataserver/mvdemo?t=theme_demo_cities&bbox=-122.0,25,-100,45&to_srid=3857

指定したbboxに接触するすべてのデータをCITIES表から小数点以下3桁、スタイリング情報なしの3857 SRIDで取得するには:

http://example:8080/mapviewer/dataserver/mvdemo?t=theme_demo_cities&bbox=-122.0,25,-100,45&to_srid=3857&dadp=3&include_style_info=no

すべてのデータをCOUNTIES表から取得して、ラベル・ボックスを含めるには:

http://example:8080/mapviewer/dataserver/mvdemo?t=theme_demo_counties&include_label_box=yes

3.1.2.2 JDBCテーマからのデータの取得

次のパラメータは、動的JDBCテーマに基づいたマップ・ビジュアライゼーション・コンポーネント・テーマからデータを取得するマップ・データ・サーバー・リクエストに使用できます。t (テーマ名)パラメータとsql (SQL問合せ)パラメータは必須ですが、その他のパラメータはオプションです。

  • t: テーマの名前。

  • sql: 完全なSQL問合せ(適切にURLエンコードされたもの)。

  • asis: 問合せを「そのまま」実行する必要があるかどうかを決定します。デフォルトは、falseです。この値により、マップ・ビジュアライゼーション・コンポーネントは、その空間フィルタ問合せの副問合せとしてSQL問合せを埋め込みます。この値がtrueの場合、マップ・ビジュアライゼーション・コンポーネントは指定された問合せ文字列の変更を試行しなくなります。

  • bbox: バウンディング・ボックス。minx,miny,maxx,maxyのカンマ区切りリストにする必要があります。

  • to_srid: データを返すためのSRID (空間参照システム)。

  • bbox_srid: データのネイティブSRIDとは異なる場合の枠ボックスのSRID (空間参照システム)。

  • seq: シーケンスID。マルチパート形式でデータを取得するときに使用します。

  • dadp: 小数点以下の桁数。返されるデータの座標系に対する小数点以下の最大桁数です。

  • include_style_info: それぞれの地物にスタイリング情報(レンダリング/ラベリング・スタイル名、および関連する列)を含めるかどうかを決定します。(デフォルト値はtrueです。)

  • include_label_box: 各ポリゴン地物にラベル・ボックスを含めるかどうかを決定します。(デフォルト値はtrueです。)ラベル・ボックスは、ポリゴンに収まる最大付近の矩形です。この矩形の内側に配置されるラベルは、ポリゴン地物に完全に収まるように生成されます。このパラメータは、ポリゴン以外の地物に対しては無視されます。

次に例を示します

CITIES表のすべてのデータをSRID 3857で取得するには:

http://example:8080/mapviewer/dataserver/mvdemo?t=theme1&sql=select+*+from+cities&to_srid=3857

特定のbboxに収まるCITIES表のすべてのデータをSRID 3857で取得するには:

http://example:8080/mapviewer/dataserver/mvdemo?t=theme1&sql=select+*+from+cities&to_srid=3857&bbox=-122.0,25,-100,45

問合せをbboxなしでそのまま実行し、SRID 3857でデータを返すには:

http://example:8080/mapviewer/dataserver/mvdemo?t=theme1&sql=select+*+from+cities&to_srid=3857&bbox=-122.0,25,-100,45&asis=t

3.1.2.3 JDBCテーマからの注釈テキストの取得

JDBCテーマから注釈テキストの要素を取得するリクエストは、「JDBCテーマからのデータの取得」のリクエストと同様のものになります

次のパラメータは、動的JDBCテーマに基づいたマップ・ビジュアライゼーション・コンポーネント・テーマからデータを取得するマップ・データ・サーバー・リクエストに使用できます。t (テーマ名)、sql (SQL問合せ)、geom_type、およびbase_tableの各パラメータは必須ですが、その他のパラメータはオプションです。

  • t: テーマの名前。

  • sql: 完全なSQL問合せ(適切にURLエンコードされたもの)。

  • geom_type: 空間列が注釈タイプであることを示す、annotationとして指定する必要があります。

  • base_table: データベース表(その表の注釈テキスト・メタデータを読み取るサーバー用のもの)。

  • asis: 問合せを「そのまま」実行する必要があるかどうかを決定します。デフォルトは、falseです。この値により、マップ・ビジュアライゼーション・コンポーネントは、その空間フィルタ問合せの副問合せとしてSQL問合せを埋め込みます。この値がtrueの場合、マップ・ビジュアライゼーション・コンポーネントは指定された問合せ文字列の変更を試行しなくなります。

  • bbox: バウンディング・ボックス。minx,miny,maxx,maxyのカンマ区切りリストにする必要があります。

  • to_srid: データを返すためのSRID (空間参照システム)。

  • bbox_srid: データのネイティブSRIDとは異なる場合の枠ボックスのSRID (空間参照システム)。

  • seq: シーケンスID。マルチパート形式でデータを取得するときに使用します。

  • dadp: 小数点以下の桁数。返されるデータの座標系に対する小数点以下の最大桁数です。

  • include_style_info: それぞれの地物にスタイリング情報(レンダリング/ラベリング・スタイル名、および関連する列)を含めるかどうかを決定します。(デフォルト値はtrueです。)

  • include_label_box: 各ポリゴン地物にラベル・ボックスを含めるかどうかを決定します。(デフォルト値はtrueです。)ラベル・ボックスは、ポリゴンに収まる最大付近の矩形です。この矩形の内側に配置されるラベルは、ポリゴン地物に完全に収まるように生成されます。このパラメータは、ポリゴン以外の地物に対しては無視されます。

次の例では、注釈テキスト情報を取得します。

http://example:8080/mapviewer/dataserver/tilsmenv?t=theme1&sql=select+*+from+annotext_table&geom_col=textobj&geom_type=annotation&base_table=annotext_table&bbox=0,0,10,10

通常のレスポンスには、注釈テキスト・メタデータ情報に加えて、注釈テキスト地物が含まれています。それぞれの注釈テキスト地物には、1つ以上のテキスト要素が含まれていることがあります。それぞれのテキスト要素は、テキスト値、場所、引出し線、およびグラフィックの属性で定義されています。詳細は、注釈テキストについてのOGC仕様書を参照してください。

レスポンスは、次のようになります。

{"type":"AnnotationText",
"collectionName":"theme1",
"srs":0,
"geodetic":false,
"bbox":[0, 0, 10, 10],
"attr_names":["ID"],
"attr_types":["double"],
"default_text_attributes":{"fontWeight":"Normal","fontStyle":"Normal","textDecoration":"None","letterSpacing":"Normal","wordSpacing":"Normal","fill":"black","fill-opacity":1.0,"stroke":"black","strokeWidth":1.0,"stroke-opacity":1.0,"horizontalAlignment":"start","verticalAlignment":"top","multilineJustification":"left","multilineSpacing":0.0},
"metadata":{"textExpression":"name","textAttributes":{"fontFamily":"Serif","fontSize":14.0,"fill":"#ff0000"}},
"features":[
{"type":"AnnoText", "elements":[{"location":{"type":"Point", "coordinates":[1, 1]},"textValue":"Sample Label 1","leaderLine":{"type":"LineString", "coordinates":[0,0,1,1]}}],"envelope":{"type":"Rectangle", "coordinates":[0,0,1,1]},"properties":{"ID":"1.0"}},
{"type":"AnnoText", "elements":[{"location":{"type":"LineString", "coordinates":[2,5,4,5,6,5]},"leaderLine":{"type":"LineString", "coordinates":[4,3,4,5]},"textAttributes":{"fontFamily":"Dialog","fontSize":14.0,"fill":"blue"}}],"envelope":{"type":"Rectangle", "coordinates":[2,3,6,5]},"properties":{"ID":"3.0"}},
{"type":"AnnoText", "elements":[{"location":{"type":"Point", "coordinates":[10, 10]},"textValue":"Sample Label 2","leaderLine":{"type":"LineString", "coordinates":[5,10,10,10]}}],"envelope":{"type":"LineString", "coordinates":[5,10,10,10]},"properties":{"ID":"2.0"}}
]}

3.1.2.4 トポロジ・データの取得

トポロジ・セットは、トポロジ・プリミティブのセット(フェイス、エッジ、およびノード)で定義されます。それぞれのトポロジ地物は、1つ以上のトポロジ・プリミティブに関連付けできます。

トポロジ・プリミティブを取得するリクエストには、次の例に示すように、topologyパラメータを含める必要があります。

http://example:8080/mapviewer/dataserver/tilsmenv?topology=city_data&bbox=10,10,35,35

レスポンスには、入力MBRに接触するすべてのプリミティブが含まれています。

{"type":"TopologyPrimitives",
"topology":"city_data",
"srs":0,
"bbox":[0, 0, 62, 42],
"face_attr_names":["FACE_ID","BOUNDARY_EDGE_ID","ISLAND_EDGE_ID_LIST","ISLAND_NODE_ID_LIST"],
"face_attr_types":["integer","integer","array:integer","array:integer"],
"edge_attr_names":["EDGE_ID","START_NODE_ID","END_NODE_ID","NEXT_LEFT_EDGE_ID","PREV_LEFT_EDGE_ID","NEXT_RIGHT_EDGE_ID","PREV_RIGHT_EDGE_ID","LEFT_FACE_ID","RIGHT_FACE_ID"],
"edge_attr_types":["integer","integer","integer","integer","integer","integer","integer","integer","integer"],
"node_attr_names":["NODE_ID","EDGE_ID","FACE_ID"],
"node_attr_types":["integer","integer","integer"],
"primitives":[
{"type":"Face", "mbr_geometry":{"type":"Rectangle", "coordinates":[3,30,15,38]}, "properties":{"FACE_ID":"1", "BOUNDARY_EDGE_ID":"1", "ISLAND_EDGE_ID_LIST":[25]}},
{"type":"Face", "mbr_geometry":{"type":"Rectangle", "coordinates":[9,14,21,22]}, "properties":{"FACE_ID":"3", "BOUNDARY_EDGE_ID":"19"}},
{"type":"Face", "mbr_geometry":{"type":"Rectangle", "coordinates":[9,6,21,14]}, "properties":{"FACE_ID":"6", "BOUNDARY_EDGE_ID":"20"}},
{"type":"Face", "mbr_geometry":{"type":"Rectangle", "coordinates":[17,30,31,40]}, "properties":{"FACE_ID":"2", "BOUNDARY_EDGE_ID":"2", "ISLAND_NODE_ID_LIST":[4]}},
{"type":"Face", "mbr_geometry":{"type":"Rectangle", "coordinates":[21,6,35,14]}, "properties":{"FACE_ID":"7", "BOUNDARY_EDGE_ID":"10"}},
{"type":"Face", "mbr_geometry":{"type":"Rectangle", "coordinates":[21,14,35,22]}, "properties":{"FACE_ID":"4", "BOUNDARY_EDGE_ID":"17"}},
{"type":"Face", "mbr_geometry":{"type":"Rectangle", "coordinates":[35,14,47,22]}, "properties":{"FACE_ID":"5", "BOUNDARY_EDGE_ID":"15"}},
{"type":"Face", "mbr_geometry":{"type":"Rectangle", "coordinates":[35,6,47,14]}, "properties":{"FACE_ID":"8", "BOUNDARY_EDGE_ID":"16"}},
{"type":"Edge", "geometry":{"type":"LineString", "coordinates":[8,30,16,30,16,38,3,38,3,30,8,30]}, "properties":{"EDGE_ID":"1", "START_NODE_ID":"1", "END_NODE_ID":"1", "NEXT_LEFT_EDGE_ID":"1", "PREV_LEFT_EDGE_ID":"1", "NEXT_RIGHT_EDGE_ID":"-1", "PREV_RIGHT_EDGE_ID":"-1", "LEFT_FACE_ID":"1", "RIGHT_FACE_ID":"-1"}},
{"type":"Edge", "geometry":{"type":"LineString", "coordinates":[4,31,7,31,7,34,4,34,4,31]}, "properties":{"EDGE_ID":"26", "START_NODE_ID":"20", "END_NODE_ID":"20", "NEXT_LEFT_EDGE_ID":"26", "PREV_LEFT_EDGE_ID":"26", "NEXT_RIGHT_EDGE_ID":"-26", "PREV_RIGHT_EDGE_ID":"-26", "LEFT_FACE_ID":"9", "RIGHT_FACE_ID":"1"}},
{"type":"Edge", "geometry":{"type":"LineString", "coordinates":[9,22,21,22]}, "properties":{"EDGE_ID":"6", "START_NODE_ID":"16", "END_NODE_ID":"17", "NEXT_LEFT_EDGE_ID":"7", "PREV_LEFT_EDGE_ID":"21", "NEXT_RIGHT_EDGE_ID":"-21", "PREV_RIGHT_EDGE_ID":"19", "LEFT_FACE_ID":"-1", "RIGHT_FACE_ID":"3"}},
{"type":"Edge", "geometry":{"type":"LineString", "coordinates":[9,14,9,22]}, "properties":{"EDGE_ID":"21", "START_NODE_ID":"15", "END_NODE_ID":"16", "NEXT_LEFT_EDGE_ID":"6", "PREV_LEFT_EDGE_ID":"22", "NEXT_RIGHT_EDGE_ID":"9", "PREV_RIGHT_EDGE_ID":"-6", "LEFT_FACE_ID":"-1", "RIGHT_FACE_ID":"3"}},
{"type":"Edge", "geometry":{"type":"LineString", "coordinates":[9,14,21,14]}, "properties":{"EDGE_ID":"9", "START_NODE_ID":"15", "END_NODE_ID":"14", "NEXT_LEFT_EDGE_ID":"19", "PREV_LEFT_EDGE_ID":"-21", "NEXT_RIGHT_EDGE_ID":"-22", "PREV_RIGHT_EDGE_ID":"20", "LEFT_FACE_ID":"3", "RIGHT_FACE_ID":"6"}},
{"type":"Edge", "geometry":{"type":"LineString", "coordinates":[9,6,21,6]}, "properties":{"EDGE_ID":"12", "START_NODE_ID":"8", "END_NODE_ID":"9", "NEXT_LEFT_EDGE_ID":"20", "PREV_LEFT_EDGE_ID":"-22", "NEXT_RIGHT_EDGE_ID":"22", "PREV_RIGHT_EDGE_ID":"-13", "LEFT_FACE_ID":"6", "RIGHT_FACE_ID":"-1"}},
{"type":"Edge", "geometry":{"type":"LineString", "coordinates":[9,35,13,35]}, "properties":{"EDGE_ID":"25", "START_NODE_ID":"21", "END_NODE_ID":"22", "NEXT_LEFT_EDGE_ID":"-25", "PREV_LEFT_EDGE_ID":"-25", "NEXT_RIGHT_EDGE_ID":"25", "PREV_RIGHT_EDGE_ID":"25", "LEFT_FACE_ID":"1", "RIGHT_FACE_ID":"1"}},
{"type":"Edge", "geometry":{"type":"LineString", "coordinates":[9,6,9,14]}, "properties":{"EDGE_ID":"22", "START_NODE_ID":"8", "END_NODE_ID":"15", "NEXT_LEFT_EDGE_ID":"21", "PREV_LEFT_EDGE_ID":"-12", "NEXT_RIGHT_EDGE_ID":"12", "PREV_RIGHT_EDGE_ID":"-9", "LEFT_FACE_ID":"-1", "RIGHT_FACE_ID":"6"}},
{"type":"Edge", "geometry":{"type":"LineString", "coordinates":[25,30,31,30,31,40,17,40,17,30,25,30]}, "properties":{"EDGE_ID":"2", "START_NODE_ID":"2", "END_NODE_ID":"2", "NEXT_LEFT_EDGE_ID":"3", "PREV_LEFT_EDGE_ID":"-3", "NEXT_RIGHT_EDGE_ID":"-2", "PREV_RIGHT_EDGE_ID":"-2", "LEFT_FACE_ID":"2", "RIGHT_FACE_ID":"-1"}},
{"type":"Edge", "geometry":{"type":"LineString", "coordinates":[21,6,35,6]}, "properties":{"EDGE_ID":"13", "START_NODE_ID":"9", "END_NODE_ID":"10", "NEXT_LEFT_EDGE_ID":"18", "PREV_LEFT_EDGE_ID":"-20", "NEXT_RIGHT_EDGE_ID":"-12", "PREV_RIGHT_EDGE_ID":"-14", "LEFT_FACE_ID":"7", "RIGHT_FACE_ID":"-1"}},
{"type":"Edge", "geometry":{"type":"LineString", "coordinates":[21,22,35,22]}, "properties":{"EDGE_ID":"7", "START_NODE_ID":"17", "END_NODE_ID":"18", "NEXT_LEFT_EDGE_ID":"8", "PREV_LEFT_EDGE_ID":"6", "NEXT_RIGHT_EDGE_ID":"-19", "PREV_RIGHT_EDGE_ID":"17", "LEFT_FACE_ID":"-1", "RIGHT_FACE_ID":"4"}},
{"type":"Edge", "geometry":{"type":"LineString", "coordinates":[21,6,21,14]}, "properties":{"EDGE_ID":"20", "START_NODE_ID":"9", "END_NODE_ID":"14", "NEXT_LEFT_EDGE_ID":"-9", "PREV_LEFT_EDGE_ID":"12", "NEXT_RIGHT_EDGE_ID":"13", "PREV_RIGHT_EDGE_ID":"10", "LEFT_FACE_ID":"6", "RIGHT_FACE_ID":"7"}},
{"type":"Edge", "geometry":{"type":"LineString", "coordinates":[35,14,21,14]}, "properties":{"EDGE_ID":"10", "START_NODE_ID":"13", "END_NODE_ID":"14", "NEXT_LEFT_EDGE_ID":"-20", "PREV_LEFT_EDGE_ID":"18", "NEXT_RIGHT_EDGE_ID":"17", "PREV_RIGHT_EDGE_ID":"-19", "LEFT_FACE_ID":"7", "RIGHT_FACE_ID":"4"}},
{"type":"Edge", "geometry":{"type":"LineString", "coordinates":[21,14,21,22]}, "properties":{"EDGE_ID":"19", "START_NODE_ID":"14", "END_NODE_ID":"17", "NEXT_LEFT_EDGE_ID":"-6", "PREV_LEFT_EDGE_ID":"9", "NEXT_RIGHT_EDGE_ID":"-10", "PREV_RIGHT_EDGE_ID":"-7", "LEFT_FACE_ID":"3", "RIGHT_FACE_ID":"4"}},
{"type":"Edge", "geometry":{"type":"LineString", "coordinates":[25,30,25,35]}, "properties":{"EDGE_ID":"3", "START_NODE_ID":"2", "END_NODE_ID":"3", "NEXT_LEFT_EDGE_ID":"-3", "PREV_LEFT_EDGE_ID":"2", "NEXT_RIGHT_EDGE_ID":"2", "PREV_RIGHT_EDGE_ID":"3", "LEFT_FACE_ID":"2", "RIGHT_FACE_ID":"2"}},
{"type":"Edge", "geometry":{"type":"LineString", "coordinates":[35,6,47,6]}, "properties":{"EDGE_ID":"14", "START_NODE_ID":"10", "END_NODE_ID":"11", "NEXT_LEFT_EDGE_ID":"16", "PREV_LEFT_EDGE_ID":"-18", "NEXT_RIGHT_EDGE_ID":"-13", "PREV_RIGHT_EDGE_ID":"-16", "LEFT_FACE_ID":"8", "RIGHT_FACE_ID":"-1"}},
{"type":"Edge", "geometry":{"type":"LineString", "coordinates":[35,14,47,14]}, "properties":{"EDGE_ID":"11", "START_NODE_ID":"13", "END_NODE_ID":"12", "NEXT_LEFT_EDGE_ID":"15", "PREV_LEFT_EDGE_ID":"-17", "NEXT_RIGHT_EDGE_ID":"-18", "PREV_RIGHT_EDGE_ID":"16", "LEFT_FACE_ID":"5", "RIGHT_FACE_ID":"8"}},
{"type":"Edge", "geometry":{"type":"LineString", "coordinates":[35,6,35,14]}, "properties":{"EDGE_ID":"18", "START_NODE_ID":"10", "END_NODE_ID":"13", "NEXT_LEFT_EDGE_ID":"10", "PREV_LEFT_EDGE_ID":"13", "NEXT_RIGHT_EDGE_ID":"14", "PREV_RIGHT_EDGE_ID":"-11", "LEFT_FACE_ID":"7", "RIGHT_FACE_ID":"8"}},
{"type":"Edge", "geometry":{"type":"LineString", "coordinates":[35,22,47,22]}, "properties":{"EDGE_ID":"8", "START_NODE_ID":"18", "END_NODE_ID":"19", "NEXT_LEFT_EDGE_ID":"-15", "PREV_LEFT_EDGE_ID":"7", "NEXT_RIGHT_EDGE_ID":"-17", "PREV_RIGHT_EDGE_ID":"15", "LEFT_FACE_ID":"-1", "RIGHT_FACE_ID":"5"}},
{"type":"Edge", "geometry":{"type":"LineString", "coordinates":[35,14,35,22]}, "properties":{"EDGE_ID":"17", "START_NODE_ID":"13", "END_NODE_ID":"18", "NEXT_LEFT_EDGE_ID":"-7", "PREV_LEFT_EDGE_ID":"-10", "NEXT_RIGHT_EDGE_ID":"11", "PREV_RIGHT_EDGE_ID":"-8", "LEFT_FACE_ID":"4", "RIGHT_FACE_ID":"5"}},
{"type":"Edge", "geometry":{"type":"LineString", "coordinates":[36,38,38,35,41,34,42,33,45,32,47,28,50,28,52,32,57,33]}, "properties":{"EDGE_ID":"4", "START_NODE_ID":"5", "END_NODE_ID":"6", "NEXT_LEFT_EDGE_ID":"-5", "PREV_LEFT_EDGE_ID":"-4", "NEXT_RIGHT_EDGE_ID":"4", "PREV_RIGHT_EDGE_ID":"5", "LEFT_FACE_ID":"-1", "RIGHT_FACE_ID":"-1"}},
{"type":"Edge", "geometry":{"type":"LineString", "coordinates":[41,40,45,40,47,42,62,41,61,38,59,39,57,36,57,33]}, "properties":{"EDGE_ID":"5", "START_NODE_ID":"7", "END_NODE_ID":"6", "NEXT_LEFT_EDGE_ID":"-4", "PREV_LEFT_EDGE_ID":"-5", "NEXT_RIGHT_EDGE_ID":"5", "PREV_RIGHT_EDGE_ID":"4", "LEFT_FACE_ID":"-1", "RIGHT_FACE_ID":"-1"}},
{"type":"Edge", "geometry":{"type":"LineString", "coordinates":[47,14,47,22]}, "properties":{"EDGE_ID":"15", "START_NODE_ID":"12", "END_NODE_ID":"19", "NEXT_LEFT_EDGE_ID":"-8", "PREV_LEFT_EDGE_ID":"11", "NEXT_RIGHT_EDGE_ID":"-16", "PREV_RIGHT_EDGE_ID":"8", "LEFT_FACE_ID":"5", "RIGHT_FACE_ID":"-1"}},
{"type":"Edge", "geometry":{"type":"LineString", "coordinates":[47,6,47,14]}, "properties":{"EDGE_ID":"16", "START_NODE_ID":"11", "END_NODE_ID":"12", "NEXT_LEFT_EDGE_ID":"-11", "PREV_LEFT_EDGE_ID":"14", "NEXT_RIGHT_EDGE_ID":"-14", "PREV_RIGHT_EDGE_ID":"-15", "LEFT_FACE_ID":"8", "RIGHT_FACE_ID":"-1"}},
{"type":"Node", "geometry":{"type":"Point", "coordinates":[4, 31]}, "properties":{"NODE_ID":"20", "EDGE_ID":"26", "FACE_ID":"0"}},
{"type":"Node", "geometry":{"type":"Point", "coordinates":[8, 30]}, "properties":{"NODE_ID":"1", "EDGE_ID":"1", "FACE_ID":"0"}},
{"type":"Node", "geometry":{"type":"Point", "coordinates":[9, 6]}, "properties":{"NODE_ID":"8", "EDGE_ID":"12", "FACE_ID":"0"}},
{"type":"Node", "geometry":{"type":"Point", "coordinates":[9, 35]}, "properties":{"NODE_ID":"21", "EDGE_ID":"25", "FACE_ID":"0"}},
{"type":"Node", "geometry":{"type":"Point", "coordinates":[9, 14]}, "properties":{"NODE_ID":"15", "EDGE_ID":"21", "FACE_ID":"0"}},
{"type":"Node", "geometry":{"type":"Point", "coordinates":[9, 22]}, "properties":{"NODE_ID":"16", "EDGE_ID":"6", "FACE_ID":"0"}},
{"type":"Node", "geometry":{"type":"Point", "coordinates":[13, 35]}, "properties":{"NODE_ID":"22", "EDGE_ID":"-25", "FACE_ID":"0"}},
{"type":"Node", "geometry":{"type":"Point", "coordinates":[20, 37]}, "properties":{"NODE_ID":"4", "EDGE_ID":"0", "FACE_ID":"2"}},
{"type":"Node", "geometry":{"type":"Point", "coordinates":[21, 14]}, "properties":{"NODE_ID":"14", "EDGE_ID":"19", "FACE_ID":"0"}},
{"type":"Node", "geometry":{"type":"Point", "coordinates":[21, 22]}, "properties":{"NODE_ID":"17", "EDGE_ID":"7", "FACE_ID":"0"}},
{"type":"Node", "geometry":{"type":"Point", "coordinates":[21, 6]}, "properties":{"NODE_ID":"9", "EDGE_ID":"20", "FACE_ID":"0"}},
{"type":"Node", "geometry":{"type":"Point", "coordinates":[25, 30]}, "properties":{"NODE_ID":"2", "EDGE_ID":"2", "FACE_ID":"0"}},
{"type":"Node", "geometry":{"type":"Point", "coordinates":[25, 35]}, "properties":{"NODE_ID":"3", "EDGE_ID":"-3", "FACE_ID":"0"}},
{"type":"Node", "geometry":{"type":"Point", "coordinates":[35, 14]}, "properties":{"NODE_ID":"13", "EDGE_ID":"17", "FACE_ID":"0"}},
{"type":"Node", "geometry":{"type":"Point", "coordinates":[35, 6]}, "properties":{"NODE_ID":"10", "EDGE_ID":"18", "FACE_ID":"0"}},
{"type":"Node", "geometry":{"type":"Point", "coordinates":[35, 22]}, "properties":{"NODE_ID":"18", "EDGE_ID":"8", "FACE_ID":"0"}},
{"type":"Node", "geometry":{"type":"Point", "coordinates":[36, 38]}, "properties":{"NODE_ID":"5", "EDGE_ID":"4", "FACE_ID":"0"}},
{"type":"Node", "geometry":{"type":"Point", "coordinates":[41, 40]}, "properties":{"NODE_ID":"7", "EDGE_ID":"5", "FACE_ID":"0"}},
{"type":"Node", "geometry":{"type":"Point", "coordinates":[47, 14]}, "properties":{"NODE_ID":"12", "EDGE_ID":"15", "FACE_ID":"0"}},
{"type":"Node", "geometry":{"type":"Point", "coordinates":[47, 6]}, "properties":{"NODE_ID":"11", "EDGE_ID":"-14", "FACE_ID":"0"}},
{"type":"Node", "geometry":{"type":"Point", "coordinates":[47, 22]}, "properties":{"NODE_ID":"19", "EDGE_ID":"-15", "FACE_ID":"0"}},
{"type":"Node", "geometry":{"type":"Point", "coordinates":[57, 33]}, "properties":{"NODE_ID":"6", "EDGE_ID":"-4", "FACE_ID":"0"}}
]}

トポロジ地物を取得するために、次の例では、topologyパラメータ、base_tableパラメータ、およびgeom_colパラメータを指定しています(grom_colは、トポロジ列を表しています)。

http://example:8080/mapviewer/dataserver/tilsmenv?topology=city_data&base_table=land_parcels&geom_col=feature

このリクエストのレスポンスは、次のようなものになります。

{"type":"TopologyFeatures",
"topology":"CITY_DATA",
"topology_id":5,
"topology_owner":"TILSZUSER",
"tolerance":5.0E-5,
"srs":0,
"table_schema":"TILSZUSER",
"table_name":"LAND_PARCELS",
"topo_column":"FEATURE",
"layer_id":1,
"layer_type":"POLYGON",
"layer_level":0,
"child_layer":0,
"node_sequence":"CITY_DATA_NODE_S",
"edge_sequence":"CITY_DATA_EDGE_S",
"face_sequence":"CITY_DATA_FACE_S",
"feature_sequence":"CITY_DATA_TG_S",
"digits_right_decimal":16,
"attr_names":["FEATURE_NAME"],
"attr_types":["string"],
"features":[
{"type":"topology", "tg_id":4, "primitives":[{"topo_id":3,"topo_type":3},{"topo_id":6,"topo_type":3}], "properties":{"FEATURE_NAME":"P1"}},
{"type":"topology", "tg_id":5, "primitives":[{"topo_id":4,"topo_type":3},{"topo_id":7,"topo_type":3}], "properties":{"FEATURE_NAME":"P2"}},
{"type":"topology", "tg_id":6, "primitives":[{"topo_id":5,"topo_type":3},{"topo_id":8,"topo_type":3}], "properties":{"FEATURE_NAME":"P3"}},
{"type":"topology", "tg_id":7, "primitives":[{"topo_id":2,"topo_type":3}], "properties":{"FEATURE_NAME":"P4"}},
{"type":"topology", "tg_id":8, "primitives":[{"topo_id":1,"topo_type":3}], "properties":{"FEATURE_NAME":"P5"}}
]}

プリミティブのフェイス、エッジ、およびノードを指定するために、次の例ではプリミティブの識別子を定義しています。

http://example:8080/mapviewer/dataserver/tilsmenv?topology=city_data&face_ids=-1&edge_ids=3,4&node_ids=5

このリクエストのレスポンスは、次のようなものになります。

{"type":"TopologyPrimitives",
"topology":"city_data",
"srs":0,
"bbox":[0, 0, 57, 38],
"face_attr_names":["FACE_ID","BOUNDARY_EDGE_ID","ISLAND_EDGE_ID_LIST","ISLAND_NODE_ID_LIST"],
"face_attr_types":["integer","integer","array:integer","array:integer"],
"edge_attr_names":["EDGE_ID","START_NODE_ID","END_NODE_ID","NEXT_LEFT_EDGE_ID","PREV_LEFT_EDGE_ID","NEXT_RIGHT_EDGE_ID","PREV_RIGHT_EDGE_ID","LEFT_FACE_ID","RIGHT_FACE_ID"],
"edge_attr_types":["integer","integer","integer","integer","integer","integer","integer","integer","integer"],
"node_attr_names":["NODE_ID","EDGE_ID","FACE_ID"],
"node_attr_types":["integer","integer","integer"],
"primitives":[
{"type":"Face", "properties":{"FACE_ID":"-1", "BOUNDARY_EDGE_ID":"0", "ISLAND_EDGE_ID_LIST":[-1,-2,4,6]}},
{"type":"Edge", "geometry":{"type":"LineString", "coordinates":[25,30,25,35]}, "properties":{"EDGE_ID":"3", "START_NODE_ID":"2", "END_NODE_ID":"3", "NEXT_LEFT_EDGE_ID":"-3", "PREV_LEFT_EDGE_ID":"2", "NEXT_RIGHT_EDGE_ID":"2", "PREV_RIGHT_EDGE_ID":"3", "LEFT_FACE_ID":"2", "RIGHT_FACE_ID":"2"}},
{"type":"Edge", "geometry":{"type":"LineString", "coordinates":[36,38,38,35,41,34,42,33,45,32,47,28,50,28,52,32,57,33]}, "properties":{"EDGE_ID":"4", "START_NODE_ID":"5", "END_NODE_ID":"6", "NEXT_LEFT_EDGE_ID":"-5", "PREV_LEFT_EDGE_ID":"-4", "NEXT_RIGHT_EDGE_ID":"4", "PREV_RIGHT_EDGE_ID":"5", "LEFT_FACE_ID":"-1", "RIGHT_FACE_ID":"-1"}},
{"type":"Node", "geometry":{"type":"Point", "coordinates":[36, 38]}, "properties":{"NODE_ID":"5", "EDGE_ID":"4", "FACE_ID":"0"}}
]}

3.1.3 マップ・データ・サーバーから返されたデータの解釈

マップ・データ・サーバーは、圧縮されたGeoJSON形式でデータを返します。パフォーマンスと情報の実用性を向上するために、標準GeoJSONにいくつかのマイナーな変更と追加が実施されています。

次に、レスポンス例を示します。

{"type":"FeatureCollection",
"collectionName":"theme1",
"srs":3857,
"geodetic":false,
"bbox":[-17566686.86258, 2414218.89842, -7905675.57465, 8629389.76988],
"attr_names":["CITY","STATE_ABRV","POP90","RANK90"],
"attr_types":["string","string","double","double"],
"features":[
{"type":"Feature","_id":"AAASQ3AAEAAAAMbAAA","geometry": {"type":"Point", "coordinates":[-119.99823, 38.9052]},"properties":{"CITY":"SOUTH LAKE TAHOE", "SALES":"125.8", "NAME":"FACTORY STORES AT THE Y", "_label_":"FACTORY STORES AT THE Y"},"styles":{"rendering":{"style":"M.SMALL CIRCLE"},"labeling":{"style":"T.RED STREET", "columns":["_label_"]}}},
{"type":"Feature","_id":"AAASQ3AAEAAAAMbAAB","geometry": {"type":"Point", "coordinates":[-121.95073, 37.53356]},"properties":{"CITY":"FREMONT", "SALES":"186.8", "NAME":"OHLONE VILLAGE", "_label_":"OHLONE VILLAGE"},"styles":{"rendering":{"style":"M.SMALL CIRCLE"},"labeling":{"style":"T.RED STREET", "columns":["_label_"]}}},
{"type":"Feature","_id":"AAASQ3AAEAAAAMbAAC","geometry": {"type":"Point", "coordinates":[-118.48844, 34.02353]},"properties":{"CITY":"SANTA MONICA", "SALES":"9.1", "NAME":"SANTA MONICA PLACE", "_label_":"SANTA MONICA PLACE"},"styles":{"rendering":{"style":"M.SMALL CIRCLE"},"labeling":{"style":"T.RED STREET", "columns":["_label_"]}}},
{"type":"Feature","_id":"AAASQ3AAEAAAAMbAAD","geometry": {"type":"Point", "coordinates":[-118.55093, 34.42104]},"properties":{"CITY":"SANTA CLARITA", "SALES":"52.6", "NAME":"VALENCIA TOWN CENTER", "_label_":"VALENCIA TOWN CENTER"},"styles":{"rendering":{"style":"M.SMALL CIRCLE"},"labeling":{"style":"T.RED STREET", "columns":["_label_"]}}},
{"type":"Feature","_id":"AAASQ3AAEAAAAMbAAE","geometry": {"type":"Point", "coordinates":[-122.56007, 38.08187]},"properties":{"CITY":"NOVATO", "SALES":"119.1", "NAME":"VINTAGE OAKS AT NOVATO", "_label_":"VINTAGE OAKS AT NOVATO"},"styles":{"rendering":{"style":"M.SMALL CIRCLE"},"labeling":{"style":"T.RED STREET", "columns":["_label_"]}}}]}

レスポンスには、最小ヘッダーおよび地物の配列が含まれます。ヘッダーには、空間参照システム(srs) ID、および結果データの最小の枠ボックスが含まれます。地物の配列には、属性名とそのタイプが含まれています。有効なタイプ名には、"byte"、"short"、"int","long"、"float"、"double"、"char"、"string"、"boolean"、"date"があります。

それぞれの地物には、次のフィールドが適用されます。

  • type: 常にFeatureです。

  • _id: オプションのIDまたはkey属性。

  • geometry: 変更済のGeoJSON形式でエンコードされた実際のジオメトリ。

  • properties: 地物に関するすべてのプロパティ(名前と値のペア)を格納しているオブジェクト。

  • styles: オプションのスタイリング情報オブジェクト。2つの埋込みオブジェクトrenderinglabelingが含まれています。これらは、同じ構造体を共有しています。基本的に、オブジェクトにはstyleフィールドとオプションのcolumns配列が含まれています。現時点では、事前定義済テーマのみがレスポンスに含まれるスタイリング情報をサポートしています。そのため、動的テーマのレスポンスには、スタイリング情報が含まれません。

  • label_box: 4つの要素の配列。ラベル・ボックスのminXminYmaxX、およびmaxYを指定しています。ポリゴンにのみ、ラベル・ボックスが含まれている可能性があります。

ラベル・テキストは、_label_という名前の疑似プロパティとして、常にプロパティ・リストに含まれている点に注意してください。

3.1.4 マップ・データ・サーバー・エラーの処理

マップ・データ・サーバーは、データ・リクエストを処理できない場合に、エラー・オブジェクトを含むJSONレスポンスを送信します。このJSONエラー・オブジェクトは、次のようなものになります。

{"error":
  {"code": "ora-500",
   "message": "Table requested does not exist",
   "details": "maybe a stack trace here..."
  }
}

前述のJSONオブジェクトでは、codeはマップ・データ・サーバーのみが理解するエラー・コードになり、messageには警告ダイアログでユーザーに表示できる短いメッセージが含まれています。また、detailsは、詳細を含めることができるオプションのフィールドです(これが含まれている場合は、スタック・トレースなどになります)。