Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Корректный способ поиска адреса выбранной точки #382

Open
jose4ka opened this issue Mar 28, 2024 · 1 comment

Comments

@jose4ka
Copy link

jose4ka commented Mar 28, 2024

Всем привет!
Какой верный способ получения адреса определённой точки?
Задача стоит следующая: навёл камеру на точку - сделал запрос и получил её адрес

Пытался сделать это через search manager, вот код (грязный и некрасивый, чисто чтобы поковырять его работу):

            override fun onCameraPositionChanged(
                p0: Map,
                p1: CameraPosition,
                p2: CameraUpdateReason,
                p3: Boolean
            ) {
                Log.i("===SEARCH", "onCameraPositionChanged: move")
                if(p3){
                    Log.i("===SEARCH", "onCameraPositionChanged: makee request")
                    searchManager.submit(
                        p1.target,
                        p1.zoom.toInt(),
                        SearchOptions(),
                        object : Session.SearchListener {
                            override fun onSearchResponse(p0: Response) {
                                try {
                                    val house = p0.collection.children.firstOrNull()?.obj
                                        ?.metadataContainer
                                        ?.getItem(BusinessObjectMetadata::class.java)
                                        ?.address
                                        ?.components
                                        ?.firstOrNull { it.kinds.contains(Address.Component.Kind.HOUSE) }
                                        ?.name

                                    val street = p0.collection.children.firstOrNull()?.obj
                                        ?.metadataContainer
                                        ?.getItem(BusinessObjectMetadata::class.java)
                                        ?.address
                                        ?.components
                                        ?.firstOrNull { it.kinds.contains(Address.Component.Kind.STREET) }
                                        ?.name

                                    bind!!.tvSearched.setText("${street} ${house}")

                                }
                                catch (e : Exception){
                                    e.printStackTrace()
                                }



                            }

                            override fun onSearchError(p0: Error) {
                                Log.i("===SEARCH_ERROR", "onSearchResponse: ${p0}")
                            }

                        }
                    )
                }




            }

        })

Собственно по итогу, переменные house и street у меня были равны null. (но если попытаться достать название города - то всё ок, он возвращается корректно). Причём я ковырял получаемые объекты через отладчик, через логи выводил значения практически всех переменных, но ни разу не нашёл каких-либо упоминаний об адресе.

В какую сторону конкретно копать? Быть может я что-то действительно делаю не так?

На данный момент решил вопрос с использованием Geocoder'a (в пакете android.location), но этот метод не всегда точный (не всегда возвращает корректный адрес), думаю что через ваше API ситуация всяко будет лучше

@YandexMapKit
Copy link
Collaborator

Можете прислать, пожалуйста, ваш проект в минимальном варианте. Его можно выложить проектом на GitHub, прикрепить к комментарию в архиве или загрузить на Яндекс Диск и прислать ссылку. Так мы можем проверить работоспособность кода в полной мере.

И скажите, в какой именно местности, координатах вы производите геокодирование через менеджер — нужно исключить случаи, когда поля улицы и номера дома действительно отсутствуют в точке.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants