2017-02-05 5 views
-3

Я пытаюсь работать с API-интерфейсом ArcGIS JavaScript. Я использую this FeatureLayer example, и я пытаюсь сделать всплывающее окно, в котором будут отображаться разные данные на основе идентификатора объекта, на который я нажимаю. В основном, что вы видите на этом примере.Как получить ObjectID из ArcGIS FeatureLayer в функции щелчка?

Проблема в том, что я не могу получить доступ к шаблону внешней переменной ObjectID. Внутри этого шаблона переменной вы просто устанавливаете заголовок как заголовок: «ID этого объекта - {ObjectID}». Это работает хорошо. Но у меня есть данные, хранящиеся в моей базе данных MySQL, поэтому я хочу, чтобы ObjectID хранился в переменной, когда я нажимаю на нее, а затем, возможно, отправляю ее через ajax на какой-то маршрут. Затем в контроллере найдите соответствующий объект, получите его данные из базы данных и отправьте его обратно во всплывающий шаблон и отобразите его.

Это моя идея, как это может работать, но мне нужно сначала получить ObjectID, который я не знаю, как получить доступ. Если у вас есть идея, как это можно решить, или вы знаете, как лучше поместить дополнительные данные из базы данных в PopupTemplate, сообщите мне, пожалуйста. Благодарю.

EDIT:

require([ 
     "esri/Map", 
     "esri/views/MapView", 
     "esri/layers/FeatureLayer", 
     "dojo/on", 
     "dojo/domReady!" 
    ], function(Map, MapView, FeatureLayer, On) { 
     var featureLayer = new FeatureLayer({ 
      url: "https://services.arcgis.com/V6ZHFr6zdgNZuVG0/ArcGIS/rest/services/NYCDemographics1/FeatureServer/0", 
      outFields: ["*"] 
     }); 

     var map = new Map({ 
      basemap: "streets", 
      layers: [featureLayer] 
     }); 

     var view = new MapView({ 
      container: "viewDiv", 
      map: map, 
      zoom: 11, 
      center: [-73.950, 40.702] //CZ [16, 49] 
     }); 

     var template = { 
      title: "Marriage in NY, Zip Code: {ZIP}", 
      content: "<p>As of 2015, <b>{MARRIEDRATE}%</b> of the population in this zip code is married.</p>" + 
      "<ul><li>{MARRIED_CY} people are married</li>" + 
      "<li>{NEVMARR_CY} have never married</li>" + 
      "<li>{DIVORCD_CY} are divorced</li><ul>" 
     }; 

     featureLayer.popupTemplate = template; 

     On(featureLayer, 'click', function(e){ 
      console.log(e); 
     }); 

    }); 
+0

Вы можете разместить код JS для всего ваш всплывающий шаблон? И уточнить: вы спрашиваете, как заставить всплывающее слово «ID этого объекта: 1», «ID этого объекта - 2» и т. Д.? – Erica

+0

@Erica Я использую в основном то, что в этом примере, просто проверьте его. Нет, это то, что легко сделать и хорошо работает, потому что ObjectID напрямую хранится в слое на сервере ArcGIS, если я правильно понял. Поэтому в шаблоне вы просто используете синтаксис {ObjectID} или {ATTRIBUTE_NAME} или что угодно, и всплывающее окно отображается с фактическими значениями. Я хочу показать дополнительные данные из моей локальной базы данных во всплывающем окне, а не те, которые хранятся на сервере ArcGIS. У меня есть база данных с инвазивными растениями, и я храню ссылки на изображения, описания, их имена и т. Д., И я хочу, чтобы эти данные также отображались во всплывающем окне. – Oliver

+0

Когда вы нажмете на FeatureLayer, событие click будет возвращать объект с именем «object», но на самом деле это объект esri.Graphic, который является в основном функцией. Вы можете получить доступ к атрибутам объектов в этом объекте, включая ObjectID. – greenkarmic

ответ

0

с "dojo/on" Вы можете обрабатывать событие щелчка на вашем художественном уровне, а затем получить атрибуты формы вы щелкнули:

On(featureLayer, 'click', function (e) { 
    console.log(e.graphic.attributes.OBJECTID); 
}); 
+0

Это выглядит хорошо, я искал что-то подобное, но это не работает вообще. Нет консольного журнала, когда я нажимаю на featureLayer, даже если шаблон всплывает. Я обновил свой вопрос с помощью своего фактического кода, чтобы вы могли его проверить. Кстати, я использую версию ArcGIS для JavaScript версии 4. Спасибо за вашу помощь. – Oliver

+0

Будет что-то с featureLayer. Я попробовал view.on ('click', function (e) { console.log (e); }); и работает отлично, но мне нужен OBJECTID из featureLayer, но он не работает с ним. – Oliver

+0

Хорошо, у меня есть! https://developers.arcgis.com/javascript/latest/sample-code/sandbox/index.html?sample=view-hittest. Он работает немного по-другому, он не запрашивает сам FeatureLayer, но запрашивает представление для получения screenPoint (x, y), и представление возвращает ответ с графикой и атрибутами функциональных слоев и т. д., которые лежат на конкретном screenPoint co, я могу получить эти атрибуты, на которые вы указали. Еще раз спасибо за вашу помощь. @ user1851595 – Oliver