Source: geocoders/address/yandexGeocodingItem.js

let ol = require('openlayers');

let GeocodingItem = require('./geocodingItem');
let GeocodingDictionary = require('./../../constants/geocoding');

let SearchResult = require('./../../tasks/searchResult');

class YandexGeocodingItem extends GeocodingItem {
    constructor(params) {
        super(params);

        // координаты точки
        let position = params.Point.pos.split(" ").map((item) => {
            return Number(item)
        });

        this.position = position;

        // координаты описывающего прямоугольника
        let lowerCorner = params.boundedBy.Envelope.lowerCorner.split(" ").map((item) => {
            return Number(item)
        });
        let upperCorner = params.boundedBy.Envelope.upperCorner.split(" ").map((item) => {
            return Number(item)
        });

        let extent = {lowerCorner: lowerCorner, upperCorner: upperCorner};
        this.extent = extent;

        let geocoderMetadata = params.metaDataProperty.GeocoderMetaData;

        // описание найденного геообъекта
        this.address = geocoderMetadata.text;

        // точность соответствия поиска
        this.precision = GeocodingDictionary.geocodingPrecision.yandex[geocoderMetadata.precision];
        this.kind = GeocodingDictionary.geocodingKind.yandex[geocoderMetadata.kind];

        this.layerId = "Yandex:Geocoder";
    }

    /**
     * Приводит результат геокодинга к классу SearchResult
     * @return {SearchResult} - результат геокодирования
     */
    getSearchResult() {
        let self = this;
        let attributes = {
            address: self.address,
            precision: self.precision,
            kind: self.kind
        };

        let geometry = new ol.geom.Point(ol.proj.fromLonLat(self.position));

        let result = new SearchResult({
            layerId: self.layerId,
            layerName: self.layerId,
            queryGeometry: geometry,
            geometry: geometry,
            attributes: attributes,
            preparedAttributes: [
                {
                    name: "address",
                    alias: "Адрес",
                    group: undefined,
                    value: self.address
                },
                {
                    name: "precision",
                    alias: "Оценка геокодирования",
                    group: undefined,
                    value: self.precision
                },
                {
                    name: "kind",
                    alias: "Тип объекта",
                    group: undefined,
                    value: self.kind
                }
            ],
            dirtyData: new ol.Feature({
                geometry: geometry,
                address: self.address,
                precision: self.precision,
                kind: self.kind
            }),
            title: self.address
        });
        return result;
    }
}

module.exports = YandexGeocodingItem;