Thêm API JavaScript ARCGIS FeatureLayer


8

Tôi hiện đang khám phá API JavaScript ArcGIS. Tôi có các dịch vụ bản đồ và dịch vụ tính năng của riêng mình trên máy chủ cục bộ. Tôi muốn sử dụng FeatuerLayer để chọn và đánh dấu tính năng trên bản đồ. Nhưng khi tôi thêm dịch vụ tính năng của mình, tôi gặp lỗi sau.

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

Tôi không thể tìm ra điều này có thể là gì, và tôi không chắc liệu lớp tính năng đã được thêm vào bản đồ hay chưa. Làm thế nào tôi có thể kiểm tra nếu nó đã được thêm vào? Tôi đã thử sử dụng phương thức dojo.connect với FeatureLayer với sự kiện onClick. Nhưng điều này dường như không hoạt động. Đã đặt mã dưới đây

Mã số:

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

Câu trả lời:


4

URL được chuyển đến esri.layers.FeatureLayer cần dành cho một lớp cụ thể. Mã của bạn trỏ đến thư mục gốc của dịch vụ tính năng.

Để khắc phục điều này, hãy thêm chỉ mục lớp của lớp URL. Chẳng hạn, trong dịch vụ tính năng này , lớp sông là lớp 1. Để tạo lớp tính năng bằng lớp này, bạn sẽ sử dụng url này: http://sampleserver3.arcgisonline.com/ArcGIS/rest/service/Hydrography/Watershed173811/ Máy chủ tính năng / 1 . Điều này được thể hiện trong mẫu lớp tính năng ONDEMAND mặc dù mẫu sử dụng dịch vụ bản đồ. Nếu bạn chỉ hiển thị dữ liệu, bạn có thể sử dụng dịch vụ bản đồ cho dịch vụ tính năng. Nếu bạn muốn chỉnh sửa dữ liệu thông qua API ArcGIS cho JavaScript, bạn phải sử dụng URL dịch vụ tính năng.


Cảm ơn vì đã trả lời. Tôi đã thử nó, tôi nghĩ rằng lớp tính năng đã được thêm vào. Tôi đã kiểm tra bằng cách sử dụng một sự kiện onload. Nhưng khi tôi thử sự kiện onclick trên lớp tính năng thì nó không hoạt động. Vui lòng đề xuất một cách tốt nhất để xác định xem một lớp tính năng đã được thêm vào chưa và sử dụng nó. Mục tiêu của ứng dụng của tôi là 1) làm nổi bật một vài tính năng, 2) chỉnh sửa một vài tính năng. Từ các mẫu tôi nghĩ rằng một lớp tính năng sẽ giúp. Xin hãy sửa tôi nếu tôi sai.
Karthik Bharadwaj

@KarthikBharadwaj vui lòng gửi câu hỏi mới, các bình luận không phải là nơi thích hợp cho loại thảo luận này.
Derek Swingley

1

Một FeatureLayer kết thúc bằng một chữ số, đó là một khái niệm mảng.

/ dịch vụ / url / điểm / tại đây

so với

/ tính năng / url / điểm / ở đây / 0

Url đầu tiên trỏ đến một dịch vụ chứa bất kỳ vị trí nào từ 1 đến X Tính năng. Trong khi url thứ hai trỏ đến một Tính năng cụ thể bên trong dịch vụ đó.

Mong rằng sẽ giúp ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.