ddubrava / angular-yandex-maps

🗺️ Yandex.Maps Angular components that implement the Yandex.Maps JavaScript API
https://ddubrava.github.io/angular8-yandex-maps/#/
MIT License
57 stars 7 forks source link

Как обратиться к геокодеру напрямую? #68

Closed kirill-kot closed 3 years ago

kirill-kot commented 3 years ago

❓ Help Wanted

✍️ Description

Подключил карту в компоненте инстансом скрипта через подписку

this.yaScriptService.initScript().subscribe((ymaps) => {
 тут создал карту и геометку, всё ок
}));

но вот как обратиться к yamaps.geocode("Москва") из примеров и документации так и не понял. Реквестую помощь

🌎 Environment

Angular CLI: 11.2.2 Node: 12.0.0 OS: win32 x64

Angular: 11.2.3 ... animations, common, compiler, compiler-cli, core, forms ... language-service, localize, platform-browser ... platform-browser-dynamic, router Ivy Workspace: Yes

Package Version

@angular-devkit/architect 0.1102.2 @angular-devkit/build-angular 0.1102.2 @angular-devkit/core 11.2.2 @angular-devkit/schematics 11.2.2 @angular/cli 11.2.2 @schematics/angular 11.2.2 @schematics/update 0.1102.2 rxjs 6.6.6 typescript 4.1.5

angular8-yandex-maps версии пробовал и ^11.0.1 и ^10.3.1 как в примере тут

kirill-kot commented 3 years ago

попробовал альтернативный вариант, как вот тут https://stackblitz.com/edit/geocoder-v2

создал карту в компоненте ` <ya-map (load)="onMapLoad($event)" (yaclick)="onYaClick($event)" [center]="[55.87, 37.66]" [zoom]="16"

`

в ивенте при инициализации назначил инстанс ymaps public async onMapLoad(event): Promise<any> { if (event.instance) { event.instance.geoObjects.add( new ymaps.Placemark(event.instance.getCenter(), {}, {}) ); this.ymapSearch = event.ymaps; return (this.ymapMapInstance = event.instance); } }

привязал метод на клик по карте public onYaClick(event) { const coords = event.event.get("coords"); this.geoLat = event.event.get("coords")[0]; this.geoLong = event.event.get("coords")[1]; event.instance.geoObjects.removeAll(); event.instance.geoObjects.add(new ymaps.Placemark(coords, {}, {})); }

пока геокодер при использовании во внешнем методе компонента не геокодит

ddubrava commented 3 years ago

Привет, для геокодера нужен апи ключ

const mapConfig: YaConfig = {
  apikey: API_KEY_HERE,
  lang: 'en_US'
};

Обновил этот пример под 11 версию библиотеки - https://stackblitz.com/edit/geocoder-v2

kirill-kot commented 3 years ago

Ключ есть, пример посмотрел, спасибо

kirill-kot commented 3 years ago

В целом оно вот так работает, через яклик координаты получает и переставляет карту, но как такие же действия делать, например, через внешнее поле ввода?

kirill-kot commented 3 years ago

впрочем, вопрос снимается, для будущих поколений оставляю это здесь

ddubrava commented 3 years ago

впрочем, вопрос снимается, для будущих поколений оставляю это здесь

Желательно скрывать контрол, пока yaEvt не инициализируется. Или еще как-то решить проблему асинхронности, т.к. API может долго отвечать, yaEvt будет undefined, а на UI уже есть контрол и возможность ввода

kirill-kot commented 3 years ago

впрочем, вопрос снимается, для будущих поколений оставляю это здесь

Желательно скрывать контрол, пока yaEvt не инициализируется. Или еще как-то решить проблему асинхронности, т.к. API может долго отвечать, yaEvt будет undefined, а на UI уже есть контрол и возможность ввода

у меня по дизайну подходит такая реализация, но другим возможно это будет полезно. Подправил на *ngIf="yaEvt"

ну и внутри самого метода geocode поставил проверку на yaEvt, чтоб точно ошибок не было