我正在尝试从火力基地过滤我的位置列表,并按照与用户位置的相对距离进行过滤。然后将位置标记添加到Google地图。但是,它不起作用。
这是我的代码:
我的用户地图:
Widget _userMap(BuildContext context, userLat, userLong) {
return Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
child: GoogleMap(
mapType: MapType.normal,
initialCameraPosition: currentLocation == null
? CameraPosition(
target: LatLng(40.748817, -73.985428), zoom: 10, tilt: 45)
: CameraPosition(
target: LatLng(userLat, userLong), zoom: 10, tilt: 45),
myLocationEnabled: true,
onMapCreated: onMapCreated,
markers:
markers != null ? Set<Marker>.of(markers.values) : markers));
}
这是我过滤数据的方法:
filterMarker(_userlat, _userlong) {
for (int i = 0; i < venues.length; ++i) {
Geolocator()
.distanceBetween(
_userLat, _userlong, venues[i].latitude, venues[i].longitude)
.then((calcDist) {
if (calcDist / 1000 < 4) {
placeFilteredMarker(venues[i], calcDist / 1000, venues[i].name,
venues[i].latitude, venues[i].longitude);
}
});
}
}
placeFilteredMarker(venue, distance, name, lat, lng) {
final int markerCount = venues.length;
for (int i = 0; i < markerCount; i++) {
final String markerIdVal = 'marker_id_$markerCount';
final MarkerId markerId = MarkerId(markerIdVal);
// creating a new MARKER
final Marker marker = Marker(
markerId: markerId,
position: LatLng(lat, lng),
infoWindow: InfoWindow(title: name, snippet: '*'),
icon: BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueBlue),
);
setState(() {
// adding a new marker to map
markers[markerId] = marker;
print(marker.markerId);
});
print('marker done');
return;
}
}
让我知道我哪里出了错。
答案 0 :(得分:0)
我在这里找到了更新后可能需要的所有东西:
地图标记= {};
然后使用该方法:
Future filterMarker(_userlat, _userlong) async {
int filterCounter = 0;
for (int i = 0; i < venues.length; ++i) {
Geolocator()
.distanceBetween(
_userLat, _userlong, venues[i].latitude, venues[i].longitude)
.then((calcDist) {
if (calcDist / 1000 < 1) {
filterCounter++;
placeFilteredMarker(filterCounter, calcDist / 1000, venues[i].name,
venues[i].latitude, venues[i].longitude);
}
print(filterCounter);
});
}
}
placeFilteredMarker(counter, distance, name, lat, lng) {
final int markerCount = counter;
for (int i = 0; i < markerCount; i++) {
final String markerIdVal = 'marker_id_$markerCount';
final MarkerId markerId = MarkerId(markerIdVal);
// creating a new MARKER
final Marker marker = Marker(
markerId: markerId,
position: LatLng(lat, lng),
infoWindow: InfoWindow(title: name, snippet: '*'),
icon: BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueBlue),
);
setState(() {
markers[markerId] = marker;
// adding a new marker to map
});
return;
}
}
并作为我进入地图的值:
markers:Set.of(markers.values)