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;