Не удается запросить атрибуты объектов из ArcGIS Online Service Feature - PullRequest
0 голосов
/ 08 ноября 2019

Я создал сервис объектов в ArcGIS online, который насчитывает около 2000 объектов. Каждая функция имеет четыре поля: имя, широта, долгота и логическое поле проверки (true / false). Используются два пользовательских символа - один для проверенных функций и один для неподтвержденных функций. Я успешно подключился к сервису объектов из моего родного (xcode / swift) приложения для iOS, и функции правильно отображаются в верхней части базовой карты. Я реализовал сенсорный делегат и успешно определяю, когда коснулся символ объекта. Проблема, с которой я сталкиваюсь, заключается в попытке запроса (чтения) атрибута поля «имя», связанного с символом, который был нажатЯ попытался использовать приведенный ниже код, но не смог прочитать атрибут:

 func geoView(_ geoView: AGSGeoView, didTapAtScreenPoint screenPoint: CGPoint, mapPoint: AGSPoint) {

    if let activeSelectionQuery = activeSelectionQuery {
        activeSelectionQuery.cancel()
    }
    guard let featureLayer = featureLayer else {
        return
    }
    //tolerance level
    let toleranceInPoints: Double = 12
    //use tolerance to compute the envelope for query
    let toleranceInMapUnits = toleranceInPoints * viewMap.unitsPerPoint
    let envelope = AGSEnvelope(xMin: mapPoint.x - toleranceInMapUnits,
                               yMin: mapPoint.y - toleranceInMapUnits,
                               xMax: mapPoint.x + toleranceInMapUnits,
                               yMax: mapPoint.y + toleranceInMapUnits,
                               spatialReference: viewMap.map?.spatialReference)

    //create query parameters object
    let queryParams = AGSQueryParameters()
    queryParams.geometry = envelope


    //run the selection query
    activeSelectionQuery = featureLayer.selectFeatures(withQuery: queryParams, mode: .new) { [weak self] (queryResult: AGSFeatureQueryResult?, error: Error?) in
        if let error = error {
            print("error: ",error)
        }
        if let result = queryResult {
            print("\(result.featureEnumerator().allObjects.count) feature(s) selected")
            print("name: ", result.fields)
        }
    }
}

Я использую ArGIS iOS 100.6 SDK. Любая помощь будет признательна в решении этой проблемы.

1 Ответ

0 голосов
/ 12 ноября 2019

Методы выбора featureLayer просто обновляют отображение вида карты, чтобы визуально выделить элементы.

Из featureLayer вы должны получить featureTable, а затем вызвать query() для этого. Обратите внимание, что есть два метода. Простой query(), который возвращает минимальные атрибуты, или переопределение для AGSServiceFeatureTable, которое позволяет вам указать, что вы хотите вернуть все поля обратно. Возможно, вам потребуется указать .loadAll в этом переопределении, чтобы вернуть поле name. Мы делаем это таким образом, чтобы не загружать слишком много информации (по умолчанию мы загружаем достаточно для обозначения и маркировки функции).

...