GET_FEATURESとFEATURES

はじめに

GET_FEATURESは選択されたアイテム、検索結果の属性、あるいはその両方についてのジオメトリ情報へアクセスするために使用される、用途の広いリクエストです。その情報はFEATURESレスポンス中で返却されます。

GET_FEATURESリクエストはイメージ、ArcMapイメージ、フィーチャ サービスで使用できます。以下のマップ設定ファイルは、このドキュメントのGET_FEATURESのサンプルに対して使用されます。このマップ設定ファイルの内容は"ESRIDATA"データセットの5つのレイヤから構成されています。使用するレイヤ名、シェープファイル名、レイヤIDを以下の表に示します。

レイヤ名シェープファイル名レイヤID
OceanWORLD300
CountriesCNTRY941
StatesSTATES2
ProvincesPROVINCE3
CitiesCITIES4



GET_FEATURESリクエストに使用されるマップ設定ファイル
<?xml version="1.0" encoding="UTF-8"?>
<ARCXML version="1.1">
  <CONFIG>
    <ENVIRONMENT>
      <LOCALE country="US" language="en" variant="" />
      <UIFONT color="0,0,0" name="Arial" size="12" style="regular" />
    </ENVIRONMENT>
    <MAP dynamic="true" >
      <PROPERTIES>
        <ENVELOPE minx="-180" miny="-90" maxx="180" maxy="90" name="Initial_Extent" />
        <MAPUNITS units="decimal_degrees" />
        <FILTERCOORDSYS id="4326" />
        <FEATURECOORDSYS id="4326"/>
      </PROPERTIES>
      <WORKSPACES>
        <SHAPEWORKSPACE name="shp_ws-0" directory="C:\ESRIDATA\WORLD" />
        <SHAPEWORKSPACE name="shp_ws-2" directory="C:\ESRIDATA\USA" />
        <SHAPEWORKSPACE name="shp_ws-3" directory="C:\ESRIDATA\CANADA" />
      </WORKSPACES>
      <LAYER type="featureclass" name="Ocean" visible="true" id="0">
        <DATASET name="WORLD30" type="polygon" workspace="shp_ws-0" />
        <SIMPLERENDERER>
          <SIMPLEPOLYGONSYMBOL filltype="solid" fillcolor="0,153,255" />
        </SIMPLERENDERER>
      </LAYER>
      <LAYER type="featureclass" name="Countries" visible="true" id="1">
        <DATASET name="CNTRY94" type="polygon" workspace="shp_ws-0" />
        <SIMPLERENDERER>
          <SIMPLEPOLYGONSYMBOL filltype="solid" fillcolor="255,255,153"/>
        </SIMPLERENDERER>
      </LAYER>
      <LAYER type="featureclass" name="States" visible="true" id="2">
        <DATASET name="STATES" type="polygon" workspace="shp_ws-2" />
        <SIMPLERENDERER>
          <SIMPLEPOLYGONSYMBOL filltype="solid" fillcolor="255,0,0" />
        </SIMPLERENDERER>
      </LAYER>
      <LAYER type="featureclass" name="Provinces" visible="true" id="3">
        <DATASET name="province" type="polygon" workspace="shp_ws-3" />
        <SIMPLERENDERER>
          <SIMPLEPOLYGONSYMBOL filltype="solid" fillcolor="0,153,0" />
        </SIMPLERENDERER>
      </LAYER>
      <LAYER type="featureclass" name="Cities" visible="true" id="4">
        <DATASET name="CITIES" type="point" workspace="shp_ws-0" />
        <SIMPLERENDERER>
          <SIMPLEMARKERSYMBOL color="102,0,102" width="8.0" />
        </SIMPLERENDERER>
      </LAYER>
    </MAP>
  </CONFIG>
</ARCXML>

GET_FEATURESは1度にArcIMSサービスの1つのレイヤに対してのみ検索できます。検索はダイナミックレイヤに対しては実行できません。リクエストにはSPATIALQUERYあるいはQUERY、いずれかの要素が含まれている必要があります。検索は属性、空間フィルタ、あるいはその2つの組み合わせで実行できます。SPATIALQUERYは属性と空間の両方の検索を扱うことができるので、すべての検索に推奨されます。

以下に示すサンプルは代表的なGET_FEATURESリクエストです。LAYERは、マップ設定ファイルのレイヤIDと必ず一致するIDによって識別されます。このサンプルでは、id="4"でCitiesレイヤを参照します。SPATIALQUERYには属性検索と空間フィルタの両方が含まれています。属性検索は人口1千万人以上の都市を対象に行われます。空間検索は北アメリカをカバーする地域に範囲を制限します。

LAYERとSPATIALQUERYを使用するGET_FEATURESリクエスト
<?xml version="1.0" encoding="UTF-8" ?>
<ARCXML version="1.1">
  <REQUEST>
    <GET_FEATURES featurelimit="25" beginrecord="0" outputmode="xml" geometry="false" envelope="true" globalenvelope="true">
      <LAYER id="4" />
      <SPATIALQUERY subfields="NAME POPULTATION #SHAPE#" where="POPULATION > 10000000" >
        <SPATIALFILTER relation="area_intersection">
          <ENVELOPE minx="-129" miny="16" maxx="-50" maxy="62"/>
        </SPATIALFILTER>
      </SPATIALQUERY>
    </GET_FEATURES>
  </REQUEST>
</ARCXML>

FEATURESレスポンスで返却される情報は、GET_FEATURESリクエストで選択された属性によって変化します。それぞれの属性については、このドキュメントの後半で詳細に述べられます。

以下のサンプルはリクエストに対するレスポンスです。Mexico CityとNew York Cityの2つの都市が、SPATIALQUERYで設定された基準を満たしています。レスポンスはENVELOPEを使用した各都市の位置を含んでいます。リクエストされたNAME、POPULATION、#SHAPE#のサブフィールドもまた含まれています。レスポンスにはまた、FEATURECOUNTでフィーチャの総数が返却され、最後のENVELOPE中で両方の都市を囲む範囲が示されています。

FEATURESレスポンス
<?xml version="1.0" encoding="UTF8"?>  
<ARCXML version="1.1">
  <RESPONSE>
    <FEATURES>
      <FEATURE>
        <ENVELOPE minx="-99.127571105957" miny="19.4270458221436" maxx="-99.127571105957" maxy="19.4270458221436"/>
        <FIELDS NAME="Mexico City" POPULATION="14100000" #SHAPE#="[Geometry]" />
      </FEATURE>
      <FEATURE>
        <ENVELOPE minx="-74.0999984741211" miny="40.75" maxx="-74.0999984741211" maxy="40.75"/>
        <FIELDS NAME="New York" POPULATION="16472000" #SHAPE#="[Geometry]" />
      </FEATURE>
      <FEATURECOUNT count="2" hasmore="false" />
      <ENVELOPE minx="-99.127571105957" miny="19.4270458221436" maxx="-74.0999984741211" maxy="40.75"/>
    </FEATURES>
  </RESPONSE>
</ARCXML>

GET_FEATURESを使用したArcIMSサービスへのアクセス

GET_FEATURESリクエストの属性の設定に基づいて、FEATURESレスポンスはフィーチャ ストリームあるいはArcXMLフォーマットでデータを返却します。フィーチャ サービスへのリクエストはFeatureサーバに送られ、フィーチャ ストリーム フォーマットを使用します。ストリームはArcIMS JavaビューアあるいはArcExplorer 9にのみ解釈できる、圧縮バイナリフォーマットです。バイナリストリームはフィーチャと属性の両方のデータを含めて返却されます。

イメージとArcMapイメージ サービスへのGET_FEATURESリクエストはArcXMLフォーマットのデータに制限されます。イメージあるいはArcMapイメージ サービスで検索を行う場合、マップと属性の両方のデータを取得するために、2つのリクエストを送信する必要があります。マップのリクエストにはGET_IMAGEを使用します。属性のリクエストにはGET_FEATURESを使用します。イメージ サービスにGET_FEATURESリクエストを送信するには、リクエストは「別ルートで」送信される必要があります。リクエストが送信されるときのURLにそのルートが設定されます。以下はサンプルのURLです(すべて1行)。

http://mycomputer.domain.com/servlet/com.esri.esrimap.Esrimap
    ?ClientVersion=9.0
    &ServiceName=MyService
    &CustomService=Query
    &Form=True&Encode=True

ArcMapイメージ サービスを使用する場合、GET_IMAGEとGET_FEATURESの両方のリクエストがArcMapサーバへ送信されます。GET_FEATURESリクエストに対する別ルートの設定は必要ありません。

以下の表は、GET_FEATURESをフィーチャ、イメージ、ArcMapイメージ サービスへ使用する場合の違いについてまとめたものです。

  フィーチャ サービス イメージ サービス ArcMapイメージ サービス
GET_FEATURESリクエスト フィーチャ ストリーム ArcXML ArcXML
FEATURESレスポンス フィーチャ ストリーム ArcXML ArcXML
属性データへのGET_FEATURESリクエストの送信先 Featureサーバ Queryサーバ ArcMapサーバ
マップ描画リクエストの送信先 Featureサーバ(GET_FEATURES) Imageサーバ(GET_IMAGE) ArcMapサーバ(GET_IMAGE)

GET_FEATURESにはFEATURESレスポンスの書式を変更するために使用される一連の属性があります。書式を変更する属性はoutputmodecompactgeometryskipfeaturesenvelopeattributescheckescglobalenvelopeです。他の属性(beginrecordfeaturelimitcounthasmore)はリクエストとレスポンスでフィーチャ数を追跡するために使用されます。これらの属性は後で詳細に述べられます。

以下のサンプルと説明では、全てのリクエストとレスポンスがArcXMLフォーマットで記述されています。リクエストは「はじめに」のセクションで紹介したマップ設定ファイルで作成されるイメージ サービスに対して送信されると仮定します。

属性:outputmode

outputmode属性は、データがストリームあるいはArcXMLフォーマットのどちらでクライアントへ送信されるかを定義します。

outputmodeは以下の3つの値から1つを選択できます。 outputmode="binary"の場合、リクエストはFeatureサーバへ送信され、レスポンスは圧縮されたバイナリストリームになります。この値がデフォルトです。

outputmode="xml"の場合、すべてのフィーチャはFEATURESレスポンスのFIELDS要素内に、短いArcXMLフォーマットで返却されます。

次のサンプルでは、リクエストがStatesレイヤ(id="2")に対して行われます。SPATIALQUERYはWashington州のsubfields、STATE_NAMEとSUB_REGIONの属性値を問い合わせます。

outputmode="xml"の場合のGET_FEATURESリクエスト
<?xml version="1.0" encoding="UTF-8"?>
<ARCXML version="1.1">
  <REQUEST>
    <GET_FEATURES outputmode="xml">
      <LAYER id="2" />
      <SPATIALQUERY subfields="state_name sub_region"
where="STATE_NAME='Washington'" />
    </GET_FEATURES>
  </REQUEST>
</ARCXML>

レスポンスはWashington州の要求された情報を返却します。属性値はFIELDS要素内に1行で返却されます。属性名称はデータベースのフィールド名と同じです。

FEATURESレスポンス
<?xml version="1.0" encoding="UTF8"?>
<ARCXML version="1.1">
  <RESPONSE>
    <FEATURES>
      <FEATURE>
        <FIELDS STATE_NAME="Washington" SUB_REGION="Pacific" />
      </FEATURE>
      <FEATURECOUNT count="1" hasmore="false" />
    </FEATURES>
  </RESPONSE>
</ARCXML>

FIELDS内の属性名称は常に変わるため、XMLパーサが使用されない場合に限り、outputmodeに"xml"が使用できます。XMLパーサを使用する場合、outputmodeは有効なXMLフォーマットでデータを返却する"newxml"に設定する必要があります。outputmode="newxml"の場合、すべてのフィールドはFIELD要素を使用して返却されます。次のリクエストは前のリクエストのように、Washington州についての同じ情報を問い合わせます。

outputmode="newxml"の場合のGET_FEATURESリクエスト
<?xml version="1.0" encoding="UTF-8"?>
<ARCXML version="1.1">
  <REQUEST>
    <GET_FEATURES outputmode="newxml">
      <LAYER id="2" />
      <SPATIALQUERY subfields="state_name sub_region" where="STATE_NAME='Washington'" />
    </GET_FEATURES>
  </REQUEST>
</ARCXML>

レスポンスはWashington州の同じ情報が返却しますが、それぞれの属性値は独立したFIELD要素内に含まれています。このフォーマットでは属性名称はFIELD内で標準化され、変更することはできません。

FEATURESレスポンス
<?xml version="1.0" encoding="UTF8"?>
<ARCXML version="1.1">
  <RESPONSE>
    <FEATURES>
      <FEATURE>
        <FIELDS>
          <FIELD name="STATE_NAME" value="Washington" />
          <FIELD name="SUB_REGION" value="Pacific" />
        </FIELDS>

      </FEATURE>
      <FEATURECOUNT count="1" hasmore="false" />
    </FEATURES>
  </RESPONSE>
</ARCXML>

属性:geometry、compact

geometry属性はフィーチャのジオメトリが返却されるかどうかを決定するために使用されます。compact属性はFEATURESレスポンスでジオメトリを冗長なフォーマットか、簡潔なフォーマットのどちらで返却するかを切り替えるために使用できます。デフォルトでは、ジオメトリはPOINTを使用した冗長なフォーマットで返却されます。ジオメトリはSPATIALQUERYのsubfields属性に"#SHAPE#"あるいは"#ALL#"が含まれている場合にのみ返却されることに注意して下さい。

次のリクエストでは、geometryは"true"に、compactは"false"に設定されています。SPATIALQUERYのsubfieldsのリストには"#SHAPE#"フィールドが加えられています。

outputmode="xml"、geometry="true"、compact="false"の場合のGET_FEATURESリクエスト
<?xml version="1.0" encoding="UTF-8"?>
<ARCXML version="1.1">
  <REQUEST>
    <GET_FEATURES outputmode="xml" geometry="true" compact="false">
      <LAYER id="2" />
      <SPATIALQUERY subfields="#SHAPE# state_name sub_region"
where="STATE_NAME='Washington'" />
    </GET_FEATURES>
  </REQUEST>
</ARCXML>

レスポンスでは、Washington州のジオメトリが冗長なフォーマットで返却されます。ポリゴンの各ポイントはPOINT要素で記述されています。

FEATURESレスポンス
<?xml version="1.0" encoding="UTF8"?>  
<ARCXML version="1.1">
<RESPONSE>
  <FEATURES>
    <FEATURE>
      <FIELDS STATE_NAME="Washington" SUB_REGION="Pacific" #SHAPE#="[Geometry]" />
      <POLYGON>
        <RING>
          <POINT x="-122.400749" y="48.2253952" />
          <POINT x="-122.461585" y="48.2285423" />
          <POINT x="-122.453155" y="48.1286735" />
          .  .  .  .  .
          <POINT x="-122.400749" y="48.2253952" />

        </RING>
      </POLYGON>
    </FEATURE>
    <FEATURECOUNT count="1" hasmore="false" />
  </FEATURES>
</RESPONSE>
</ARCXML>

compact="true"の場合、レスポンスは簡潔なフォーマットでジオメトリ データを返却するためにCOORDSを使用します。次のリクエストでは、geometrycompactが"true"に設定されています。

outputmode="xml"、geometry="true"、compact="true"の場合のGET_FEATURESリクエスト
<?xml version="1.0" encoding="UTF8"?>
<ARCXML version="1.1">
  <REQUEST>
    <GET_FEATURES outputmode="xml" geometry="true" compact="true">
      <LAYER id="2" />
      <SPATIALQUERY subfields="#SHAPE# state_name sub_region"
where="STATE_NAME='Washington'" />
    </GET_FEATURES>
  </REQUEST>
</ARCXML>

レスポンスでは、座標値はCOORDS要素内にすべてグループ化されています。このレスポンスは座標値と座標値のペアとの間に、デフォルトの区切り文字である半角スペースとセミコロンをそれぞれに使用していることに注意して下さい。これらの区切り文字はマップ設定ファイル、あるいはリクエストでSEPARATORSを使用することにより変更可能です。

FEATURESレスポンス
<?xml version="1.0" encoding="UTF8"?>
<ARCXML version="1.1">
  <RESPONSE>
    <FEATURES>
      <FEATURE>
        <FIELDS STATE_NAME="Washington" SUB_REGION="Pacific" #SHAPE#="[Geometry]" />
        <POLYGON>
          <RING>
            <COORDS>-122.400749 48.2253952;-122.461585
48.2285423;-122.453155 48.1286735; . . . . .;-122.400749 48.2253952;-122.461585 48.2285423</COORDS>

          </RING>
        </POLYGON>
      </FEATURE>
      <FEATURECOUNT count="1" hasmore="false" />
    </FEATURES>
  </RESPONSE>
</ARCXML>

属性:beginrecord、featurelimit、count、hasmore

beginrecordfeaturelimit属性は、FEATURESレスポンスで返却されるフィーチャ数を制限するために、GET_FEATURES中でともに使用されます。あまりにも多くのフィーチャが返却された場合、クライアントでの処理時間は許容できないほど長くなるでしょう。

featurelimitは返却するフィーチャの最大数を設定するために使用されます。beginrecordは指定された検索結果レコード番号から検索を開始するために使用されます。例えば、最大で7つのフィーチャを返却させる場合、featurelimitは"7"に設定されます。先頭の検索結果レコードを取得するために、beginrecordは"1"で始まります(デフォルト設定)。以下のサンプルは、featurelimitbeginrecordを使用します。

featurelimit="7"、beginrecord="1"の場合のGET_FEATURESリクエスト
<?xml version="1.0" encoding="UTF8"?>
<ARCXML version="1.1">
  <REQUEST>
    <GET_FEATURES featurelimit="7" beginrecord="1" outputmode="xml" geometry="false">
      <LAYER id="2" />
      <SPATIALQUERY subfields="#SHAPE# state_name sub_region"
where="SUB_REGION='Mtn'" />
    </GET_FEATURES>
  </REQUEST>
</ARCXML>

FEATURESレスポンス中のFEATURECOUNTcount属性とhasmore属性は、返却されたフィーチャ数と、まだ取得できるフィーチャがあるかどうかの情報を含んでいます。まだ取得できるフィーチャがある場合にhasmoreは"true"に、そうでない場合は"false"に設定されます。このサンプルでは、countで返却されるフィーチャ数は"7"で、hasmoreは"true"に設定されています。

FEATURESレスポンス
<?xml version="1.0" encoding="UTF8"?>
<ARCXML version="1.1">
  <RESPONSE>
    <FEATURES>
      <FEATURE>
        . . . First 6 Records Returned . . .
      </FEATURE>
      <FEATURE>
        <FIELDS STATE_NAME="Arizona" SUB_REGION="Mtn" #SHAPE#="[Geometry]" />  
      </FEATURE>
      <FEATURECOUNT count="7" hasmore="true" />
    </FEATURES>
  </RESPONSE>
</ARCXML>

まだ取得できるフィーチャがある場合、別のGET_FEATURESリクエストはbeginrecordを"8"に設定して送信する必要があります。開発者はプログラムで追加のリクエストを処理するようにしなければいけません。

featurelimit="7"、beginrecord="8"の場合のGET_FEATURESリクエスト
<?xml version="1.0" encoding="UTF8"?>
<ARCXML version="1.1">
  <REQUEST>
    <GET_FEATURES featurelimit="7" beginrecord="8" outputmode="xml" geometry="false">
      <LAYER id="2" />
      <SPATIALQUERY subfields="#SHAPE# state_name sub_region"
where="SUB_REGION='Mtn'" />
    </GET_FEATURES>
  </REQUEST>
</ARCXML>

レスポンスでcountは"1"に、hasmoreは"false"に設定され、これ以上のレコードを取得する必要がないことを示しています。

FEATURESレスポンス
<?xml version="1.0" encoding="UTF8"?>  
<ARCXML version="1.1">
  <RESPONSE>
    <FEATURES>
      <FEATURE>
        <FIELDS STATE_NAME="New Mexico" SUB_REGION="Mtn" #SHAPE#="[Geometry]" />
      </FEATURE>
      <FEATURECOUNT count="1" hasmore="false" />
    </FEATURES>
  </RESPONSE>
</ARCXML>

属性:skipfeatures

skipfeatures属性が使用される場合、フィーチャ数のみが返却され、フィーチャ情報は返却されません。skipfeaturesoutputmodeが"xml"か"newxml"の場合にのみ有効です。以下のリクエストでは、人口が1千万人を超える都市について、Citiesレイヤ(id="4")で検索が行われます。

skipfeaturesを使用するGET_FEATURESリクエスト
<?xml version="1.0" encoding="UTF-8"?>
<ARCXML version="1.1">
  <REQUEST>
    <GET_FEATURES skipfeatures="true" outputmode="newxml">
      <LAYER id="4" />
      <SPATIALQUERY subfields="#ALL#" where="POPULATION &gt; 10000000" />
    </GET_FEATURES>
  </REQUEST>
</ARCXML>

レスポンスはFEATURECOUNTのみを含みます。このサンプルでは、11の都市の人口が1千万人を超えています。

FEATURESレスポンス
<?xml version="1.0" encoding="UTF8"?>
<ARCXML version="1.1">
  <RESPONSE>
    <FEATURES>
      <FEATURECOUNT count="11" hasmore="false" />
    </FEATURES>
  </RESPONSE>
</ARCXML>

返却されるフィーチャ数はbeginrecordfeaturelimitに依存します。featurelimitに値が設定されている場合、フィーチャ数はその値より大きくなることはありません。次の例では、同じリクエストでfeaturelimitが"5"に設定されています。

skipfeaturesとfeaturelimitを使用するGET_FEATURESリクエスト
<?xml version="1.0" encoding="UTF-8"?>
<ARCXML version="1.1">
  <REQUEST>
    <GET_FEATURES skipfeatures="true" outputmode="newxml" featurelimit="5" beginrecord="1">
      <LAYER id="4" />
      <SPATIALQUERY subfields="#ALL#" where="POPULATION &gt; 10000000" />
    </GET_FEATURES>
  </REQUEST>
</ARCXML>

レスポンス中でFEATURECOUNTは"5"ですが、hasmoreは"true"に設定され、まだ取得できるフィーチャがあることを示しています。

FEATURESレスポンス
<?xml version="1.0" encoding="UTF8"?>
<ARCXML version="1.1">
  <RESPONSE>
    <FEATURES>
      <FEATURECOUNT count="5" hasmore="true" />
    </FEATURES>
  </RESPONSE>
</ARCXML>

レイヤ中の全フィーチャ数を取得するにはSPATIALQUERYで空のwhere句を指定します。skipfeaturesが"true"に設定されている場合であっても、検索は実行され、フィーチャはカウントされる前に実際に分析されることに注意して下さい。

skipfeaturesと空のwhere句を使用するGET_FEATURESリクエスト
<?xml version="1.0" encoding="UTF-8"?>
<ARCXML version="1.1">
  <REQUEST>
    <GET_FEATURES skipfeatures="true" outputmode="newxml" >
      <LAYER id="4" />
      <SPATIALQUERY subfields="#ALL#" where="" />
    </GET_FEATURES>
  </REQUEST>
</ARCXML>

レスポンスにはレイヤの全フィーチャ数が含まれています。

FEATURESレスポンス
<?xml version="1.0" encoding="UTF8"?>
<ARCXML version="1.1">
  <RESPONSE>
    <FEATURES>
      <FEATURECOUNT count="606" hasmore="false" />
    </FEATURES>
  </RESPONSE>
</ARCXML>

属性:envelope、attributes、checkesc

envelope属性はそれぞれの返却されたフィーチャの境界範囲をリクエストするために使用されます。

attributes属性は属性データを返却するかどうかを決定するために使用されます。ジオメトリ情報のみが必要な場合、attributesを"false"に設定します。

checkesc属性は、返却されるデータに含まれる特殊文字(&、'、"、<、>)をエスケープ文字列に変換したい場合に使用されます。例えば、StatesレイヤのSUB_REGIONの値が"P&NW"だった場合、以下のようになります。

次のリクエストでは、attributesenvelopecheckescが"true"に設定されています。

attributes="true"、envelope="true"、checkesc="true"の場合のGET_FEATURESリクエスト
<?xml version="1.0" encoding="UTF8"?>
<ARCXML version="1.1">
  <REQUEST>
    <GET_FEATURES outputmode="xml" geometry="false" attributes="true" envelope="true" checkesc="true">
      <LAYER id="2" />
      <SPATIALQUERY subfields="#SHAPE# state_name sub_region" where="STATE_NAME='Washington'" />
    </GET_FEATURES>
  </REQUEST>
</ARCXML>

レスポンス中でENVELOPEはWashingtonの境界範囲を含んでいます。FIELDSは属性情報を含んでいます。SUB_REGIONの値は"P&amp;NW"でエスケープ表現されています。

FEATURESレスポンス
<?xml version="1.0" encoding="UTF8"?>
<ARCXML version="1.1">
  <RESPONSE>
    <FEATURES>
      <FEATURE>
        <ENVELOPE minx="-124.731422" miny="45.5432510" maxx="-116.918151" maxy="49.0000038"/>
        <FIELDS STATE_NAME="Washington" SUB_REGION="P&amp;NW" #SHAPE#="[Geometry]" />
      </FEATURE>
      <FEATURECOUNT count="1" hasmore="false" />
    </FEATURES>
  </RESPONSE>
</ARCXML>  

属性:globalenvelope

globalenvelope属性はレスポンスで返却される全フィーチャの境界範囲をリクエストするために使用されます。返却されるフィーチャ数はbeginrecordfeaturelimitに依存するため、featurelimitに基づいて取得された実際のレコードだけが全体の範囲に含まれます。全体の範囲を取得するために、SPATIALQUERYのsubfieldsは"#SHAPE#"か"#ALL#"のどちらかを含んでいる必要があることに注意して下さい。

次のサンプルでは、attributesは"false"に設定され、envelopeglobalenvelopeは"true"に設定されています。検索は太平洋地域の州に対応するStatesレイヤに対して行われます。

attributes="false"、envelope="true"、gloabalenvelope="true"の場合のGET_FEATURESリクエスト
<?xml version="1.0" encoding="UTF8"?>
<ARCXML version="1.1">
  <REQUEST>
    <GET_FEATURES outputmode="xml" geometry="false" attributes="false" envelope="true" globalenvelope="true">
      <LAYER id="2" />
      <SPATIALQUERY subfields="#SHAPE#" where="SUB_REGION='Pacific'" />
    </GET_FEATURES>
  </REQUEST>
</ARCXML>

レスポンス中で、それぞれのFEATUREにENVELOPEは含まれていますが、FEATUREに属性は含まれていません。レスポンスの最後に、全体の境界範囲(ENVELOPE)が含まれています。

FEATURESレスポンス
<?xml version="1.0" encoding="UTF8"?>
<ARCXML version="1.1">
  <RESPONSE>
    <FEATURES>
      <FEATURE>
        <ENVELOPE minx="-124.731422424316" miny="45.5432510375977" maxx="-116.918151855469" maxy="49.0000038146973"/>
      </FEATURE>
      <FEATURE>
        <ENVELOPE minx="-124.558395385742" miny="41.9877891540527" maxx="-116.469444274902" maxy="46.2362594604492"/>
      </FEATURE>
      <FEATURE>
        <ENVELOPE minx="-124.391471862793" miny="32.5357246398926" maxx="-114.124450683594" maxy="42.0023460388184"/>
      </FEATURE>
      <FEATURE>
        <ENVELOPE minx="-160.245178222656" miny="18.9247817993164" maxx="-154.793869018555" maxy="22.2324924468994"/>
      </FEATURE>
      <FEATURE>
        <ENVELOPE minx="-178.215026855469" miny="51.5844345092773" maxx="-129.990539550781" maxy="71.4066467285156"/>
      </FEATURE>
      <FEATURECOUNT count="5" hasmore="false" />
      <ENVELOPE minx="-178.215026855469" miny="18.9247817993164" maxx="-114.124450683594" maxy="71.4066467285156"/>
    </FEATURES>
  </RESPONSE>
</ARCXML>

ジオメトリ変換

FILTERCOORDSYSFEATURECOORDSYSの両方が、データを投影変換するためにGET_FEATURESで使用されます。投影変換されるデータはENVELOPEと、POINTあるいはCOORDSにリストされた座標に含まれます。

FILTERCOORDSYSはリクエストを行うクライアントの座標系を指定するために使用されます。FEATURECOORDSYSはサービスが投影変換される座標系を指定するために使用されます。これらの要素についての詳細な情報は投影法をご参照下さい。

最初のサンプルでは、クライアントの座標系はRobinsonです。したがって、FILTERCOORDSYSはid="54030"です。リクエストでは、SPATIALFILTERの座標系はRobinsonです。FEATURECOORDSYSもまたid="54030"であり、これはリクエストされたデータがRobinsonで返却されることを意味します。リクエストはCitiesレイヤ(id="4")に対して行われます。

サービスはデフォルトで地理座標系です。これは、ArcIMS空間サーバがリクエストを受信すると、Robinson座標系から地理座標系へ最初に投影変換することを意味します。抽出処理が行われた後、座標値はRobinson座標系へ投影変換されます。データの複雑さと抽出されるフィーチャの量に依存して、データ変換が複雑な場合に処理時間が増大することを考慮すべきです。

FILTERCOORDSYSとFEATURECOORDSYSを使用するGET_FEATURESリクエスト
<ARCXML version="1.1">
  <REQUEST>
    <GET_FEATURES featurelimit="25" beginrecord="0" outputmode="xml" geometry="true" envelope="true" compact="true">
      <LAYER id="4" />
      <SPATIALQUERY subfields="#ALL#" where="POPULATION > 10000000" >
        <FILTERCOORDSYS id="54030" />
        <FEATURECOORDSYS id="54030" />

        <SPATIALFILTER relation="area_intersection">
          <ENVELOPE minx="-11395772" miny="930558" maxx="-3878142" maxy="6419621"/>
        </SPATIALFILTER>
      </SPATIALQUERY>
    </GET_FEATURES>
  </REQUEST>
</ARCXML>

レスポンス中で、ENVELOPEとCOORDS要素内の座標値はRobinsonで返却されます。

FILTERCOORDSYSとFEATURECOORDSYSがRobinson("54030")に設定されたFEATURESレスポンス
<ARCXML version="1.1">
  <RESPONSE>
    <FEATURES>
      <FEATURE>
        <ENVELOPE minx="-9197766.55659269" miny="2075483.92733491" maxx="-9197766.55659269" maxy="2075483.92733491"/>
        <FIELDS NAME="Mexico City" COUNTRY="Mexico" POPULATION="14100000" CAPITAL="Y" #SHAPE#="[Geometry]" #ID#="221" />
        <MULTIPOINT>
          <COORDS>-9197766.55659269 2075483.92733491</COORDS>
        </MULTIPOINT>
      </FEATURE>
      <FEATURE>
        <ENVELOPE minx="-6419931.44911452" miny="4351163.61842219" maxx="-6419931.44911452" maxy="4351163.61842219"/>
        <FIELDS NAME="New York" COUNTRY="US" POPULATION="16472000" CAPITAL="N" #SHAPE#="[Geometry]" #ID#="549" />
        <MULTIPOINT>
          <COORDS>-6419931.44911452 4351163.61842219</COORDS>
        </MULTIPOINT>
      </FEATURE>
      <FEATURECOUNT count="2" hasmore="false" />
    </FEATURES>
  </RESPONSE>
</ARCXML>

次のサンプルでは、クライアントの座標系は再びRobinsonで、FILTERCOORDSYSはid="54030"です。しかし、返却されるデータは地理座標系でリクエストされています。したがって、FEATURECOORDSYSはid="4326"に設定されています。このリクエストは前のものよりも速く処理されるはずです。ArcIMS空間サーバがリクエストを受信した場合、Robinson座標系は地理座標系へ投影変換されます。しかし、データは地理座標系でリクエストされているため、さらにデータ変換を行う必要はありません。

FILTERCOORDSYSがRobinson("54030")で、FEATURECOORDSYSが地理座標系("4326")のGET_FEATURESリクエスト
<?xml version="1.0" encoding="UTF-8" ?>
<ARCXML version="1.1">
  <REQUEST>
    <GET_FEATURES featurelimit="25" beginrecord="0" outputmode="xml" geometry="true" envelope="true" compact="true">
      <LAYER id="4" />
      <SPATIALQUERY subfields="#ALL#" where="POPULATION > 10000000" >
        <FILTERCOORDSYS id="54030" />
        <FEATURECOORDSYS id="4326" />

        <SPATIALFILTER relation="area_intersection">
          <ENVELOPE minx="-11395772" miny="930558" maxx="-3878142" maxy="6419621"/>
        </SPATIALFILTER>
      </SPATIALQUERY>
    </GET_FEATURES>
  </REQUEST>
</ARCXML>

レスポンス中で、ENVELOPEとCOORDS要素内の座標データは地理座標です。

FILTERCOORDSYSがRobinson("54030")で、FEATURECOORDSYSが地理座標系("4326")のFEATURESレスポンス
<?xml version="1.0" encoding="UTF8"?>
<ARCXML version="1.1">
  <RESPONSE>
    <FEATURES>
      <FEATURE>
        <ENVELOPE minx="-99.127571105957" miny="19.4270458221436" maxx="-99.127571105957" maxy="19.4270458221436"/>
        <FIELDS NAME="Mexico City" COUNTRY="Mexico" POPULATION="14100000" CAPITAL="Y" #SHAPE#="[Geometry]" #ID#="221" />
        <MULTIPOINT>
           <COORDS>-99.127571105957 19.4270458221436</COORDS>
        </MULTIPOINT>
      </FEATURE>
      <FEATURE>
        <ENVELOPE minx="-74.0999984741211" miny="40.75" maxx="-74.0999984741211" maxy="40.75"/>
        <FIELDS NAME="New York" COUNTRY="US" POPULATION="16472000" CAPITAL="N" #SHAPE#="[Geometry]" #ID#="549" />
        <MULTIPOINT>
          <COORDS>-74.0999984741211 40.75</COORDS>
        </MULTIPOINT>
      </FEATURE>
      <FEATURECOUNT count="2" hasmore="false" />
    </FEATURES>
  </RESPONSE>
</ARCXML>

ダイナミック レイヤへのクエリ

ArcIMS 9.1から、GET_FEATURESリクエストを使用しダイナミック レイヤをクエリすることが可能になりました。 "ダイナミック"とは、マップ設定ファイルには使用されていないレイヤをリクエストによってマップサービスに直接追加することを意味します。この機能は、イメージ サービスのみ有効です。ArcMapイメージおよびフィーチャ サービスでは使用できません。

ダイナミック レイヤへのクエリの前に、ダイナミック クエリを受け入れる機能をマップ設定ファイルに設定しておく必要があります。MAP要素にdynamicfeatureを追加し、属性値を"true"に設定します。下記のとおりです。

<MAP dynamic="true" dynamicfeature="true" >

ダイナミック レイヤをクエリするリクエストは下記のとおりです。

ダイナミック レイヤへのクエリ
<ARCXML version="1.1">
  <REQUEST>
    <GET_FEATURES featurelimit="5" beginrecord="0" outputmode="xml" geometry="false" envelope="true" compact="true">
      <LAYER id="40" type="featureclass" >
        <DATASET name="country" type="polygon" workspace="shp_ws-0" />
      </LAYER>

      <SPATIALQUERY subfields="#ALL#" where="POP_CNTRY &gt; 100000000" />
    </GET_FEATURES>
  </REQUEST>
</ARCXML>



ダイナミック レイヤを追加するには、DATASETLAYERなどの情報が必要になります。LAYERには、2つの属性、idtype が必要になります。 id の値は、マップ設定ファイルでは使用されていないユニークな値にします。type値は、必ず"featureclass"を指定します。DATASETのworkspace はマップ設定ファイルやリクエストで既に設定されているワークスペース情報を参照する必要があります。可能であれば、リクエストではなくマップ設定ファイルで設定されているワークスペース情報を参照することをお勧めします。 WORKSPACESはパス名称やArcSDE接続情報を要求するので、ある一定のセキュリティを提供します。

次のリクエストでは、subfieldsがクエリで参照されます。

ダイナミック レイヤのクエリでsubfiledsを参照する場合
<?xml version="1.0" encoding="UTF-8" ?>
<ARCXML version="1.1">
  <REQUEST>
    <GET_FEATURES featurelimit="5" beginrecord="0" outputmode="xml" geometry="false" envelope="true" compact="true">
      <LAYER id="40" type="featureclass" >
        <DATASET name="country" type="polygon" workspace="shp_ws-0" />
      </LAYER>
      <SPATIALQUERY subfields="CNTRY_NAME POP_CNTRY" where="POP_CNTRY &gt; 100000000" />
    </GET_FEATURES>
  </REQUEST>
</ARCXML>

レイヤはダイナミックなので、フィールド名のリストを返すGET_SERVICE_INFOリクエストはこのレイヤに対して使用できません。 したがって、予め開発者はフィールド名称を認識している必要があります。もしくは、subfields を空白、または"#ALL#"にしておきます。

あるケースにおいて、リクエストにワークスペースの追加が必要になる場合があります。GET_FEATURESリクエストでは、シェープファイルとArcSDEのワークスペースのみが有効です。次のリクエストでは、シェープファイルを参照しています。

リクエストにシェープファイルのWORKSPACEを追加する場合
<?xml version="1.0" encoding="UTF-8" ?>
<ARCXML version="1.1">
  <REQUEST>
    <GET_FEATURES featurelimit="5" beginrecord="0" outputmode="xml" geometry="false" envelope="true" compact="true">
      <WORKSPACES>
        <SHAPEWORKSPACE name="shp_ws-5" directory="<path to EUROPE ESRIDATA>" />
      </WORKSPACES>
      <LAYER type="featureclass" id="40"> <!-- cities in Europe directory -->
        <DATASET name="cities" type="point" workspace="shp_ws-5" />
      </LAYER>
      <SPATIALQUERY subfields="#ALL#" where="CNTRY_NAME = 'Finland'" />
    </GET_FEATURES>
  </REQUEST>
</ARCXML>

ArcIMSユーザにとっては、GET_FEATURESリクエストにバッファ レイヤとターゲット レイヤを使用することは一般的です。バッファ レイヤ、ターゲット レイヤの両方ともダイナミック可能です。次の例では、ターゲット レイヤを使用します。その他の例と基本的には同じ構文です。TARGETLAYERは idtype 属性を必須とし、DATASETを必ず含みます。 

ターゲット レイヤを使用する場合
<?xml version="1.0" encoding="UTF-8" ?>
<ARCXML version="1.1">
  <REQUEST>
    <GET_FEATURES featurelimit="25" beginrecord="1" outputmode="xml" geometry="false" envelope="false" checkesc="true">       <LAYER id="4" />
<!--from the map configuration file-->
      <SPATIALQUERY>
        <BUFFER distance="500" bufferunits="miles">
          <TARGETLAYER id="40" type="featureclass" >
            <DATASET name="country" type="polygon" workspace="shp_ws-0" />
          </TARGETLAYER>

        </BUFFER>
        <SPATIALFILTER relation="area_intersection" >
          <ENVELOPE minx="94.261119081779" miny="42.8694404591104" maxx="100.459110473457" maxy="51.1334289813486" />
        </SPATIALFILTER>
      </SPATIALQUERY>
    </GET_FEATURES>
  </REQUEST>
</ARCXML>

異なるワークスペースがバッファとターゲットレイヤ用に使用されます。次がその例です。

複数のワークスペースが設定されているリクエスト

<?xml version="1.0" encoding="UTF-8" ?>
<ARCXML version="1.1">
  <REQUEST>
    <GET_FEATURES featurelimit="25" beginrecord="1" outputmode="xml" geometry="false" envelope="false" checkesc="true">
      <WORKSPACES>
        <SHAPEWORKSPACE name="shp_ws-5" directory="<path to EUROPE ESRIDATA>" />
        <SHAPEWORKSPACE name="shp_ws-6" directory="<path to WORLD ESRIDATA>" />
      </WORKSPACES>

      <LAYER type="featureclass" id="40"> <!-- cities in Europe directory -->
        <DATASET name="cities" type="point" workspace="shp_ws-5" />
      </LAYER>
      <SPATIALQUERY>
        <BUFFER distance="800" bufferunits="miles">
          <TARGETLAYER id="41" type="featureclass" >
            <DATASET name="country" type="polygon" workspace="shp_ws-6" />
          </TARGETLAYER>
        </BUFFER>
        <SPATIALFILTER relation="area_intersection" >
          <ENVELOPE minx="24.239598278335" miny="61.1549497847919" maxx="26.492109038737" maxy="63.3859397417503" />
        </SPATIALFILTER>
      </SPATIALQUERY>
    </GET_FEATURES>
  </REQUEST>
</ARCXML>