Skip to content

Instantly share code, notes, and snippets.

@etomarat
Last active April 10, 2018 10:16
Show Gist options
  • Save etomarat/b50c798f42f37c5d3ab2f2c1addfa692 to your computer and use it in GitHub Desktop.
Save etomarat/b50c798f42f37c5d3ab2f2c1addfa692 to your computer and use it in GitHub Desktop.
Get user geolocation administrative areas using yandex
export const administrativeAreas = [
{
name: 'Центральный федеральный округ',
id: 1,
regions: [
'Белгородская область',
'Брянская область',
'Владимирская область',
'Воронежская область',
'Ивановская область',
'Калужская область',
'Костромская область',
'Курская область',
'Липецкая область',
'Московская область',
'Орловская область',
'Рязанская область',
'Смоленская область',
'Тамбовская область',
'Тверская область',
'Тульская область',
'Ярославская область',
'Москва',
]
},
{
name: 'Южный федеральный округ',
id: 2,
regions: [
'Республика Адыгея',
'Республика Калмыкия',
'Краснодарский край',
'Астраханская область',
'Волгоградская область',
'Ростовская область',
]
},
{
name: 'Северо-Западный федеральный округ',
id: 3,
regions: [
'Республика Карелия',
'Республика Коми',
'Архангельская область',
'Вологодская область',
'Калининградская область',
'Ленинградская область',
'Мурманская область',
'Новгородская область',
'Псковская область',
'Санкт-Петербург',
'Ненецкий автономный округ',
]
},
{
name: 'Дальневосточный федеральный округ',
id: 4,
regions: [
'Республика Саха (Якутия)',
'Камчатский край',
'Приморский край',
'Хабаровский край',
'Амурская область',
'Магаданская область',
'Сахалинская область',
'Еврейская автономная область',
'Чукотский автономный округ',
]
},
{
name: 'Сибирский федеральный округ',
id: 5,
regions: [
'Республика Алтай',
'Республика Бурятия',
'Республика Тыва',
'Республика Хакасия',
'Алтайский край',
'Забайкальский край',
'Красноярский край',
'Иркутская область',
'Кемеровская область',
'Новосибирская область',
'Омская область',
'Томская область',
]
},
{
name: 'Уральский федеральный округ',
id: 6,
regions: [
'Курганская область',
'Свердловская область',
'Тюменская область',
'Челябинская область',
'Ханты-Мансийский автономный округ',
'Ямало-Ненецкий автономный округ',
]
},
{
name: 'Приволжский федеральный округ',
id: 7,
regions: [
'Республика Башкортостан',
'Республика Марий Эл',
'Республика Мордовия',
'Республика Татарстан',
'Удмуртская Республика',
'Чувашская Республика',
'Кировская область',
'Нижегородская область',
'Оренбургская область',
'Пензенская область',
'Ульяновская область',
'Самарская область',
'Саратовская область',
'Пермский край',
]
},
{
name: 'Северо-Кавказский федеральный округ',
id: 8,
regions: [
'Республика Дагестан',
'Чеченская Республика',
'Кабардино-Балкарская Республика',
'Карачаево-Черкесская Республика',
'Республика Северная Осетия — Алания',
'Чеченская республика',
'Ставропольский край',
'Республика Ингушетия',
]
}
];
export default class Geolocation {
constructor() {
ymaps.ready(() => {
this.administrativeAreas = administrativeAreas;
//this.test();
});
}
getUserAreaObj() {
return this.getUserCoords().then(this.getRegion)
.then(this.getAdministrativeArea);
}
getGeolocationObject() {
return ymaps.geolocation.get({
provider: 'auto',
})
}
getUserCoords() {
return this.getGeolocationObject().then(function (result) {
return result.geoObjects.get(0).geometry.getCoordinates();
});
}
getRegion(coords) {
return ymaps.geocode(coords, {
kind: 'province'
}).then(res => {
return res.geoObjects.get(0).properties
.get('metaDataProperty.GeocoderMetaData.Address.formatted');
})
}
getAdministrativeArea(regionName) {
return administrativeAreas.find(area => {
return area.regions.find((e,i,a) => {
return e === regionName;
});
});
}
test() {
administrativeAreas.forEach(area => {
area.regions.forEach(regionName => {
ymaps.geocode(regionName).then(result => {
let realRegionName = result.geoObjects.get(0).properties
.get('metaDataProperty.GeocoderMetaData.Address.formatted');
let coords = result.geoObjects.get(0).geometry.getCoordinates();
return this.getRegion(coords).then(this.getAdministrativeArea)
.then(areaResult => {
return {
area: areaResult,
regionName: realRegionName
}
});
}).then(result => {
if (!result.area) {
console.warn(`WARNING: region "${regionName}" is not recognized. Real region name is "${result.regionName}"`);
}
});
});
});
}
}
@etomarat
Copy link
Author

<script src="//api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script>
тут код который выше
const geolocation = new Geolocation();
geolocation.getUserAreaObj().then(area => console.log(area)) // Получить регион
geolocation.getUserCoords().then(area => console.log(area)) // Получить координаты. Этот метод можно переделать так чтобы получать город, а не координаты

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment