FeatureLayer ARCGIS JavaScript APIの追加


8

現在、ArcGIS JavaScript APIを調査しています。ローカルサーバーで独自のマップサービスとフィーチャサービスを使用しています。FeatuerLayerを使用して、マップ上のフィーチャを選択して強調表示したいと思います。しかし、フィーチャサービスを追加すると、次のエラーが発生します。

TypeError: Unable to draw graphic (geometry:null, symbol:null): _14 is undefined

これが何であるかを理解できず、フィーチャレイヤーがマップに追加されているかどうかわかりません。追加されたかどうかを確認するにはどうすればよいですか?onLayerのonClickイベントでdojo.connectメソッドを使用してみました。しかし、これはうまくいかないようです。以下のコードを配置しました

コード:

esri.config.defaults.io.proxyUrl = "proxy.ashx";
dojo.require("dijit.layout.BorderContainer");
dojo.require("dijit.layout.ContentPane");
dojo.require("esri.map");
dojo.require("esri.layers.FeatureLayer");
dojo.require("esri.tasks.query");

var map;
var selectionToolbar;
var infoTemplate = new esri.InfoTemplate();
infoTemplate.setTitle("${ROADNAME}");
infoTemplate.setContent("<b>ROAD NAME: </b>${LINK_ID}<br/>" + "<b>CAT</b>${CAT}</b>");

function init() {
  try {
    var initExtent = new esri.geometry.Extent({
      "xmin": 103.55,
      "ymin": 1.13,
      "xmax": 104.16,
      "ymax": 1.56,
      "spatialReference": {
        "wkid": 4326
      }
    });

    map = new esri.Map("map", {
      extent: esri.geometry.geographicToWebMercator(initExtent)
    });

    var basemap = new esri.layers.ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer");

    //my map service layer
    var basemap_sing = new esri.layers.ArcGISTiledMapServiceLayer("http://karthikpc:8399/arcgis/rest/services/Carriage_Mercantor/MapServer", {
      displayLevels: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
    });
    // my feature layer which i am not able to use              
    var featureLayer = new esri.layers.FeatureLayer("http://karthikpc:8399/arcgis/rest/services/Carriage_Mercantor/FeatureServer", {
      mode: esri.layers.FeatureLayer.MODE_ONDEMAND,
      infoTemplate: infoTemplate,
      outFields: ["*"]
    });

    map.addLayer(basemap);
    map.addLayer(base_sing);
    map.addLayer(featureLayer);

    dojo.connect(map, "onLoad", initSelectToolbar);
    dojo.connect(featureLayer."onClick", helloworld);
  } catch (e) {
    alert('An error has occurred: ' + e.message);
  }

}

function helloworld() {
  alert("hello world");
}

dojo.addOnLoad(init);

回答:


4

esri.layers.FeatureLayerに渡されるURLは、特定のレイヤーのものである必要があります。コードは、フィーチャサービスのルートを指します。

これを修正するには、レイヤーのレイヤーインデックスにURLを追加します。たとえば、このフィーチャサービスでは、河川レイヤーはレイヤー1です。このレイヤーを使用してフィーチャレイヤーを作成するには、次のURLを使用します。http//sampleserver3.arcgisonline.com/ArcGIS/rest/services/Hydrography/Watershed173811/ FeatureServer / 1。サンプルはマップサービスを使用していますが、これはONDEMANDフィーチャレイヤーサンプルに示されています。データのみを表示している場合は、どちらのマップサービスもフィーチャサービスに使用できます。ArcGIS API for JavaScriptを介してデータを編集する場合は、フィーチャサービスURLを使用する必要があります。


お返事をありがとうございます。試してみましたが、機能レイヤーが追加されたと思います。onloadイベントを使用して確認しました。しかし、フィーチャレイヤーでonclickイベントを試しましたが、うまくいきませんでした。フィーチャレイヤーが追加されているかどうかを識別し、それを利用するための最良の方法を提案してください。私のアプリケーションの目標は、1)いくつかの機能を強調表示すること、2)いくつかの機能を編集することです。サンプルから、フィーチャレイヤーが役立つと思いました。私が間違っていたら訂正してください。
Karthik Bharadwaj

@KarthikBharadwaj新しい質問を投稿してください。コメントはこのタイプのディスカッションに適した場所ではありません。
Derek Swingley、2012年

1

FeatureLayerは数字で終わりますが、これは配列の概念に近いものです。

my / service / url / points / here

my / feature / url / points / here / 0

最初のURLは、1からXの機能を含むサービスを指します。一方、2番目のURLはそのサービス内の特定の機能を指します。

お役に立てば幸い...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.