Adicionando uma API JavaScript do FeatureLayer ARCGIS

8

Atualmente, estou explorando a API JavaScript do ArcGIS. Eu tenho meus próprios serviços de mapas e serviços de recursos no meu servidor local. Eu gostaria de usar o FeatuerLayer para selecionar e destacar o recurso no mapa. Mas quando adiciono meu serviço de recursos, recebo o seguinte erro.

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

Não consigo descobrir o que pode ser isso e não tenho certeza se a camada de recursos foi adicionada ao mapa ou não. Como posso verificar se foi adicionado? Tentei usar um método dojo.connect com o FeatureLayer com um evento onClick. Mas isso não parece funcionar. Colocaram o código abaixo

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
fonte

Respostas:

4

O URL passado para esri.layers.FeatureLayer precisa ser para uma camada específica. Seu código aponta para a raiz do serviço de recursos.

Para corrigir isso, anexe o índice da camada ao URL. Por exemplo, neste serviço de recursos , a camada de rios é a camada 1. Para criar uma camada de recursos usando essa camada, use este URL: http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Hydrography/Watershed173811/ FeatureServer / 1 . Isso é mostrado na amostra da camada de recurso ONDEMAND, embora a amostra use o serviço de mapa. Se você estiver exibindo apenas dados, poderá usar o serviço de mapa para o serviço de recursos. Se você deseja editar os dados por meio da API do ArcGIS para JavaScript, use o URL do serviço de recurso.

Derek Swingley
fonte
Obrigado pela sua resposta. Eu tentei, acho que a camada de recursos foi adicionada. Eu verifiquei usando um evento onload. Mas quando tentei o evento onclick na camada de recurso, não deu certo. Por favor, sugira a melhor maneira de identificar se uma camada de recurso foi adicionada e utilizá-la. Meu objetivo do meu aplicativo é 1) destacar alguns recursos, 2) editar alguns recursos. A partir das amostras, pensei que uma camada de recurso ajudaria. Por favor corrija-me se eu estiver errado.
Karthik Bharadwaj
@KarthikBharadwaj poste uma nova pergunta, os comentários não são o local apropriado para esse tipo de discussão.
Derek Swingley
1

Um FeatureLayer termina com um dígito, que é mais um conceito de matriz.

meu / serviço / url / pontos / aqui

vs.

meu / recurso / url / pontos / aqui / 0

O primeiro URL aponta para um serviço que contém de 1 a X recursos. Enquanto o segundo URL aponta para um Recurso específico dentro desse serviço.

Espero que ajude...

randomblink
fonte