Agregar una API de JavaScript de FeatureLayer ARCGIS

8

Actualmente estoy explorando ArcGIS JavaScript API. Tengo mis propios servicios de mapas y funciones en mi servidor local. Me gustaría usar el FeatuerLayer para seleccionar y resaltar la función en el mapa. Pero cuando agrego mi servicio de características, aparece el siguiente error.

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

No puedo entender qué podría ser esto, y no estoy seguro de si la capa de entidades se ha agregado al mapa o no. ¿Cómo puedo verificar si se ha agregado? Intenté usar un método dojo.connect con FeatureLayer con un evento onClick. Pero esto no parece funcionar. Han colocado el código a continuación

Código:

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);
Karthik Bharadwaj
fuente

Respuestas:

4

La URL pasada a esri.layers.FeatureLayer debe ser para una capa específica. Su código apunta a la raíz del servicio de características.

Para solucionar esto, agregue el índice de capa de la capa a la URL. Por ejemplo, en este servicio de entidades , la capa de ríos es la capa 1. Para crear una capa de entidades con esta capa, utilizaría esta url: http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Hydrography/Watershed173811/ FeatureServer / 1 . Esto se muestra en la muestra de capa de características ONDEMAND aunque la muestra usa el servicio de mapas. Si solo está mostrando datos, puede usar el servicio de mapas para el servicio de entidades. Si desea editar los datos a través de la API de ArcGIS para JavaScript, debe usar la URL del servicio de entidades.

Derek Swingley
fuente
Gracias por su respuesta. Lo había intentado, creo que se ha agregado la capa de características. Lo comprobé usando un evento de carga. Pero cuando probé el evento onclick en la capa de entidades no funcionó. Sugiera una mejor manera de identificar si se ha agregado una capa de entidades y utilizarla. Mi objetivo de mi aplicación es 1) resaltar algunas características, 2) editar algunas características. De las muestras, pensé que una capa de características ayudaría. Por favor, corríjame si estoy equivocado.
Karthik Bharadwaj
@KarthikBharadwaj, publique una nueva pregunta, los comentarios no son el lugar adecuado para este tipo de discusión.
Derek Swingley
1

Un FeatureLayer termina con un dígito, que es más un concepto de matriz.

my / service / url / points / here

vs.

my / feature / url / points / here / 0

La primera url apunta a un servicio que contiene de 1 a X características. Mientras que la segunda url apunta a una característica específica dentro de ese servicio.

Espero que ayude...

randomblink
fuente