Михаиллл2 июля 2019 г. 14:18
Как в карте получить номера домов и их координаты
Добрый день.
У меня есть карта и я могу получить видимые координаты.
Скажите пожалуйста, как определить номера домов и их координаты в видимой части карты?
Возможно это можно получить с помощью свойства
text
import QtQuick 2.12 import QtQuick.Window 2.12 import QtLocation 5.12 import QtPositioning 5.12 //console.log("открылась Page1") //вывод текста в консоль Item { visible: true width: 480 height: 720 // width: Screen.width // height: Screen.height property double old : 19 property double now Rectangle { anchors.fill: parent color: "#eee" /*Component.onCompleted: { circle.center = src.position.coordinate circle1.center = src.position.coordinate circle2.center = src.position.coordinate maps.center = src.position.coordinate }*/ PositionSource { id: src // active: true // updateInterval: 1000 // onPositionChanged: // { // console.log("PositionSource:" ) // circle.center = position.coordinate // circle1.center = position.coordinate // circle2.center = position.coordinate // } } Address { id: address } Plugin { id: plugin name: "osm" PluginParameter { name: "osm.useragent"; value: "My great Qt OSM application" } PluginParameter { name: "osm.mapping.host"; value: "http://osm.tile.server.address/" } PluginParameter { name: "osm.mapping.copyright"; value: "All mine" } PluginParameter { name: "osm.routing.host"; value: "http://osrm.server.address/viaroute" } PluginParameter { name: "osm.geocoding.host"; value: "http://geocoding.server.address" } PluginParameter { name: "osm.places.host"; value: "http://geocoding.server.address" } } Map { id: maps anchors.fill: parent plugin: plugin gesture.enabled: true gesture.acceptedGestures: MapGestureArea.PinchGesture | MapGestureArea.PanGesture | MapGestureArea.FlickGesture gesture.flickDeceleration: 3000 zoomLevel: 19 center: QtPositioning.coordinate(59.91, 10.75) // Oslo onZoomLevelChanged: { console.log("onZoomLevelChanged:") console.log("coordinate ctnter:" + visibleRegion.center()) console.log("coordinate geoshape:" + visibleRegion.boundingGeoRectangle()) } onCenterChanged: { console.log("onCenterChanged:") console.log("coordinate ctnter:" + visibleRegion.center()) console.log("coordinate geoshape:" + visibleRegion.boundingGeoRectangle()) console.log("address:" ) } minimumZoomLevel: 1 focus: true /*MapCircle { id: circle z: 2 color: "#fff" radius: 8 border.color: "#fff" center { latitude: src.position.coordinate.latitude longitude: src.position.coordinate.longitude } } MapCircle { id: circle2 z: 3 color: "#0084ff" radius: 4 border.color: "#0084ff" center { latitude: src.position.coordinate.latitude longitude: src.position.coordinate.longitude } } MapCircle { id: circle1 z: 1 color: "#0084ff" border.color: "#0084ff" opacity: 0.25 radius: 19 center { latitude: src.position.coordinate.latitude longitude: src.position.coordinate.longitude } }*/ } } }
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Пожалуйста, авторизуйтесь или зарегистрируйтесь
AD
- Akiv Doros
- 12 ноября 2024 г. 1:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50баллов,
- Очки рейтинга-4
m
- molni99
- 26 октября 2024 г. 11:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80баллов,
- Очки рейтинга4
m
- molni99
- 26 октября 2024 г. 11:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20баллов,
- Очки рейтинга-10
Последние комментарии
Релиз утилиты развертывания С++/Qt и QML приложений CQtDeployer v1.4.0 (Binary Box) optionally substituted alkoxy, optionally substituted alkenyloxy, optionally substituted alkynyloxy, optionally substituted aryloxy, OCH, OC H, OC H, OC H, OC H, OC H, OC H, O C CH, OCH CH OH, O…
Qt/C++ - Урок 031. QCustomPlot - строим график по времени buy generic priligy We can just chat, and we will not lose too much time anyway
Qt/C++ - Урок 060. Настройка внешнего вида приложения в рантайме I didnt have an issue work colors priligy dapoxetine 60mg revia cost uk August 3, 2022 Reply
Коммутация каналов и пакетов в сетях передачи данных Angioedema 1 priligy dapoxetine
Как Копировать Файлы в Linux If only females relatives with DZ offspring were considered these percentages were 23 order priligy online uk
Сейчас обсуждают на форуме
добавить qlineseries в функции priligy amazon canada 93 GREB1 protein GREB1 AB011147 6
Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
IscanderChe1 ноября 2024 г. 1:43
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
ИМ
Реализация навигации по разделам Спасибо Евгений!
Игорь Максимов3 октября 2024 г. 14:05
Добрый день!
Я думаю, что вы можете получить информацию об адресе следующим образом из объекта Address
При этом сам номер дома по ходу придётся каким-то образом парсить из полученной строки. Судя по документации ни шиша там нету отдельной инофрмации по номеру дома.
А свойство text, собирает всё до кучи.
Если делать так
или так
то ничего не возвращает. хотя если делать так
то возвращает true. Этот код
тоже ничего не возвращает.
Похоже я неправильно пользуюсь Address или он не работает.
Еще похоже можно как то по API получить координаты и номера домов , но как, я пока не понял. Вот нашел пример в ссылке https://nominatim.openstreetmap.org/reverse.php?format=html&lat=43.64529279494597&lon=-79.38523801990962&zoom=18
Знаете... я наверное буду впотёмках лазить, если буду гадать. Поэтому у меня вопрос. Кроме того кода, который вы привели, у ваас в проекте есть ещё что-то в QML части? Я наверное просто взял бы вечером этот кусок кода и попробовалл бы скомпилировать у себя. Так наверное будет лучше.
Ничего там пока нет, но вот сам проект, так будет удобней.
mapGeocode.7z
Спасибо за участие.
Можно привязать адрес к локации, но пока не понятно как в локацию ввести 4 ограничивающие координаты.
Итак, вот получился рабочий вариант. Что интересно, некоторые параметры плагина, которые вы ввели разбивали работу карты. То есть установки по умолчанию сработали лучше. А вообще запрос адреса по координатам делается через GeocodeModel, Address может быть вспомогательной единицей, если вам нужно будет найти координаты по адресу.
Спасибо за помощь.
Теория о том, что Address поможет получить номера домов провалилась.
Как же получиться номера домов?
Может быть обращаться к API сайта OSM и запрашивать json или может быть можно все же получить эти данные у Qt карты?
Может быть можно задавать bounds : geoshape границы GeocodeModel, и уже в пределах этих гранить как то забирать у GeocodeModel координаты объектов и их номера?
Ну вообще нужная информация хранится в поле street, там идёт название улицы и номер дома, если он есть.
то есть возвращается информация здесь
Естественно, что там нет отдельного поля для номера дома. Просто потому, что это карта мира, а каждой стране свои правила нумерации домов. Вот там всё и свалено в одно поля.
Ну как вариант, ещё поле county может содержать то, что вам нужно.
Если говорить об API, то нужно тогда писать класс для запросов на основе QNetworkManager и посылать запрос координат и смотреть, что там вернётся. Но не удивлюсь, если ситуация будет та же самая.
Оказалось номер дома находится в text, вот пример того, что он возвращает:
Получается, если узнать координаты объектов - домов, находящихся на видимой части карты, их всех можно прогнать через GeocodeModel и получить номера домов и даже их описание, а для этого наверно нужно задать GeocodeModel видимую часть карты.
Вы не знаете, как у GeocodeModel узнать количество объектов на видимой части карты и их координаты?
Не думаю, что вообще возможно через GeocodeModel получить координаты и адреса всех домой в заданной области.
Для выполнения запроса в GeocodeModel присутствует свойство query. Вот его описание.
This property holds the data of the geocoding request. The property accepts three types of queries which determine both the data and the type of action to be performed:
И пример запроса
Исходя их этого описания, я могу сказать, что по конкретным координатам можно получить только адреса, которые находятся в данных координатах. Такое возможно, когда дом имеет несколько адресов. То есть все адреса в одной точке. При этом нет никакой возможности задать область поиска и получить все адреса по всем координатам.
Однако, вполне возможно, что то, что вы хотите сделать, можно реализовать с помощью PlaceSearchModel. Там можно задать область поиска, так что вполне возможно, что там как-то можно найти то, что требуется.
Подключил PlaceSearchModel и задал область поиска.
Скажите пожалуйста, как получить из PlaceSearchModel количество объектов и их координаты?
Узнал что число найденых объектов можно узнать так
Но становится вопрос о поиске, пробовал не задавать поиск или задовать так, но все равно ничего не ищет
Также пробовал вводить в поиск номер дома на экране, тоже ничего не ищет
Но по названию магазина находит объект
По названиям улиц он выводит количество видимых участков дорого:
По индексу выдает тоже 1 результат, видимо район.
Скажите пожалуйста как задать поиск так, что-бы получать все здания?
Я не уверен, что через эту модель вообще можно найти все объекты в области.
Однако по запросу можно найти, что интересует.
Вот на этой странице есть несколько полезных примеров поиска
Спасибо за ссылку. Но там забор информации идет через PlaceSearchModel .
Можно ли иначе забрать информацмю или может быть можно иначе задать поиск, чтобы получать в результате все здания?
Может быть как-то можно в PlaceSearchModel задать поис по типу (имею ввиду поиск только по зданиям, улицам)?
Есть свойство: Place.UnspecifiedVisibility , оно должно показывать область видимости для всей недвижимости. Может это можно как то прикрутить? Или может быть можно как-то получить все объекты с карты и прогнать их через Place.UnspecifiedVisibility ?
Попробовал получить хоть что-нибудь из карты, но нечего не выводит:
Похоже все данные об объектах хранятся в Plugin.
Нет ли у вас других идей, как можно достать из плагина все объекты или только нужные объекты?
Честно говоря дальше и глубже в этом вопросе я уже сам теряюсь, учитывая, что не работал с этим плагином. Пока мыслей нет на этот счёт.
Возможно что-то может подсказать само API Open Maps. Плагин QML же его использует.
Похоже остается только 2 варианта:
1. Через каждые 10 метров запрашивать место, научиться отличать дома от не домов, потом определять их координаты и потом выводить на экран.
2. Через API запрашивать информацию о домах.
Наверно 2 вариант более адекватный. Но тут сталкнулся с недостатком информации. На форму OSM не обсуждался такой вопрос. В Документации не смог найти, нашел только key = building. Не могли бы Вы глянуть на это API?
Попробовал переберать все точки с шагом 10 м, что-бы точно попасть в дом, но это парсится слишком долго. Похоже единственный вариант - запрос по API. У Вас нет идей, как это можно сделать?
Тут нашел немного документации .
Получилось сделать такие запросы
Что то они выдают, но нет координат домов. Видимо нужно добавить какие-то фильтры или еще что-то
Я открыл, посмотрел, закрыл....
Теоретически, может и возможно выдрать оттуда то, что хотите... но наверное, так и придётся искать...
Тех поддрежка Qt говорит что номера домов включает MapType.PedestrianMap .
Подскажите пожалуйста, как можно воспользоваться этим свойством.
Пока все, из того, что я пробовал с ним делать не работает.
Вот так получаются номера домов, но остаются водные знаки на экране, может быть Вы знаете, как их убрать
PS: такой запрос возвращает номера домов, но без координат
Получил Тут ключ, осталось понять, как его использовать.
По ходу, вам нужно получить ключ для API. Обычно регистрируются в сервисе и получают ключ. Там есть регистрация?
Посмотрите в описании запросов для API. Там наверняка нужно просто добавить переменную с ключом
На сайте, где получил ключ написанно следующие:
Это нужно как то указать в плагине . Может быть Вы знаете как?
Раньше у меня в коде было написанно так, видимо нужно на это опираться для модификации
Делается наверно как то так, но конкретно так не работает
Для гугла наверно работает так