Hinzufügen einer FeatureLayer ARCGIS JavaScript API


8

Ich erkunde derzeit die ArcGIS JavaScript-API. Ich habe meine eigenen Kartendienste und Funktionsdienste auf meinem lokalen Server. Ich möchte den FeatuerLayer verwenden, um Features auf der Karte auszuwählen und hervorzuheben. Wenn ich jedoch meinen Feature-Service hinzufüge, wird der folgende Fehler angezeigt.

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

Ich kann nicht herausfinden, was dies sein könnte, und ich bin nicht sicher, ob der Feature-Layer zur Karte hinzugefügt wurde oder nicht. Wie kann ich überprüfen, ob es hinzugefügt wurde? Ich habe versucht, eine dojo.connect-Methode mit dem FeatureLayer mit einem onClick-Ereignis zu verwenden. Aber das scheint nicht zu funktionieren. Habe den Code unten platziert

Code:

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);

Antworten:


4

Die an esri.layers.FeatureLayer übergebene URL muss für eine bestimmte Ebene gelten. Ihr Code zeigt auf das Stammverzeichnis des Feature-Service.

Um dies zu beheben, hängen Sie den Ebenenindex der Ebene an die URL an. In diesem Feature-Service ist der Fluss-Layer beispielsweise Layer 1. Um einen Feature-Layer mit diesem Layer zu erstellen, verwenden Sie die folgende URL: http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Hydrography/Watershed173811/ FeatureServer / 1 . Dies wird im Beispiel des ONDEMAND-Feature-Layers gezeigt, obwohl das Beispiel den Kartendienst verwendet. Wenn Sie nur Daten anzeigen, können Sie entweder den Kartendienst für den Feature-Service verwenden. Wenn Sie die Daten über die ArcGIS-API für JavaScript bearbeiten möchten, müssen Sie die URL des Feature-Service verwenden.


Danke für deine Antwort. Ich hatte es versucht, ich denke, der Feature-Layer wurde hinzugefügt. Ich habe mit einem Onload-Ereignis überprüft. Aber als ich das Onclick-Ereignis auf dem Feature-Layer ausprobierte, funktionierte es nicht. Bitte schlagen Sie einen besten Weg vor, um festzustellen, ob ein Feature-Layer hinzugefügt wurde, und um ihn zu nutzen. Mein Ziel meiner Anwendung ist es, 1) einige Funktionen hervorzuheben, 2) einige Funktionen zu bearbeiten. Von den Beispielen dachte ich, dass ein Feature-Layer helfen würde. Bitte korrigieren Sie mich, wenn ich falsch liege.
Karthik Bharadwaj

@KarthikBharadwaj Bitte poste eine neue Frage, die Kommentare sind nicht der geeignete Ort für diese Art von Diskussion.
Derek Swingley

1

Ein FeatureLayer endet mit einer Ziffer, die eher ein Array-Konzept ist.

meine / service / url / points / hier

vs.

meine / feature / url / points / here / 0

Die erste URL verweist auf einen Dienst, der Funktionen von 1 bis X enthält. Während die zweite URL auf eine bestimmte Funktion innerhalb dieses Dienstes verweist.

Ich hoffe, das hilft...

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.