Михаиллл02 липня 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
- 11 листопада 2024 р. 14:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50бали,
- Рейтинг балів-4
m
- molni99
- 26 жовтня 2024 р. 01:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80бали,
- Рейтинг балів4
m
- molni99
- 26 жовтня 2024 р. 01:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20бали,
- Рейтинг балів-10
Останні коментарі
ИМ
Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Игорь Максимов22 листопада 2024 р. 11:51
Evgenii Legotckoi31 жовтня 2024 р. 14:37
Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
Игорь Максимов05 жовтня 2024 р. 07:51
QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Тепер обговоріть на форумі
Evgenii Legotckoi24 червня 2024 р. 15:11
t
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
tonypeachey115 листопада 2024 р. 06:04
NSProject04 червня 2022 р. 03:49
IscanderChe31 жовтня 2024 р. 15:43
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
Добрый день!
Я думаю, что вы можете получить информацию об адресе следующим образом из объекта 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. Там наверняка нужно просто добавить переменную с ключом
На сайте, где получил ключ написанно следующие:
Это нужно как то указать в плагине . Может быть Вы знаете как?
Раньше у меня в коде было написанно так, видимо нужно на это опираться для модификации
Делается наверно как то так, но конкретно так не работает
Для гугла наверно работает так