blob: ece82ba20e445e2b86616d9201f1757878bbf682 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
import QtQuick 2.0
import QtPositioning 5.5
import QtLocation 5.6
import CursorNavigation 1.0
import QtGamepad 1.0
import QtQuick.Shapes 1.11
Item {
width: parent.width
height: parent.height
Timer {
id: cooldownTimer
interval: 500
repeat: false
}
Plugin {
id: mapPlugin
name: "esri" //"osm", "mapboxgl", "esri", ...
}
PositionSource {
id: positionSource
property variant lastSearchPosition: locationOslo
active: true
updateInterval: 120000 // 2 mins
onPositionChanged: {
var currentPosition = positionSource.position.coordinate
map.center = currentPosition
var distance = currentPosition.distanceTo(lastSearchPosition)
if (distance > 500) {
// 500m from last performed pizza search
lastSearchPosition = currentPosition
searchModel.searchArea = QtPositioning.circle(currentPosition)
searchModel.update()
}
}
}
property variant locationOslo: QtPositioning.coordinate( 59.93, 10.76)
PlaceSearchModel {
id: searchModel
plugin: mapPlugin
searchTerm: "Pizza"
searchArea: QtPositioning.circle(locationOslo)
Component.onCompleted: update()
}
Map {
id: map
anchors.fill: parent
plugin: mapPlugin;
center: locationOslo
zoomLevel: 13
Rectangle {
id: pointerRect
border.color: "#00ff00"
border.width: 2
visible: false
color: "transparent"
}
MapItemView {
model: searchModel
delegate: MapQuickItem {
id: itemDelegate
CursorNavigation.acceptsCursor: true
coordinate: place.location.coordinate
property bool highlight: false
anchorPoint.x: image.width * 0.5
anchorPoint.y: image.height
sourceItem: Column {
Image { id: image; source: "../graphics/marker.png";
transform: Scale {
xScale: itemDelegate.CursorNavigation.hasCursor ? 1.8 : 1
yScale: itemDelegate.CursorNavigation.hasCursor ? 1.8 : 1
origin.x: width/2
origin.y: height
}
}
Text { text: title; font.bold: itemDelegate.CursorNavigation.hasCursor }
}
}
}
}
Connections {
target: searchModel
onStatusChanged: {
if (searchModel.status == PlaceSearchModel.Error)
console.log("Search error!")
console.log(searchModel.errorString());
}
}
}
|