You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I started by checking if the point is inside polygon and it worked well. my goal is to allow a user to draw a polygon then to use that list to check if there is any point that is inside drawn polygon. I archeved to allow user draw the polygon now I want to check if there is any point inside that polygon.
the list of latLang that make the polygon is List<LatLng> _userPolyLinesLatLngList = [];
i want to create new list that i can use for map tool kit that List should have LatLang from above list.
Help me to convert that List so as I can assign as List of latlang for toolkit. therefore what I want is two variable of List the above List and new List that i can use on toolkit to check if the point is inside the polygon.
` //something like this
List<LatLng> _userPolyLinesLatLngList = [];
List<mp.LatLng> newListForToolKit = _userPolyLinesLatLngList;
//this brings error` //then
final points = mp.PolygonUtil.containsLocation(
mp.LatLng(-6.7924, 39.2083), newListForToolKit, true);
`
And Here are the complete code that allow user to draw polygon. I want to check if the point is inside polygon.
`import 'dart:async';
import 'dart:collection';
import 'dart:convert';
import 'dart:io';
import 'dart:math' as Math;
import 'package:flutter/material.dart';
import 'package:geocoding/geocoding.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:maps_toolkit/maps_toolkit.dart' as mp;
class MyHomePageMap extends StatefulWidget {
MyHomePageMap({Key? key}) : super(key: key);
// print('Distance between London and Paris is $distance km.');
// PolygonUtil.containsLocation - computes whether the given point lies inside the specified polygon.
// final distances = mp.SphericalUtil.computeDistanceBetween(mp.LatLng(51.5073509, -0.1277583), 4.3)
@OverRide
Widget build(BuildContext context) {
return Scaffold(
body: GestureDetector(
onPanUpdate: (_drawPolygonEnabled) ? _onPanUpdate : null,
onPanEnd: (_drawPolygonEnabled) ? _onPanEnd : null,
child: GoogleMap(
mapType: MapType.normal,
initialCameraPosition: _kGooglePlex,
polygons: _polygons,
polylines: _polyLines,
onMapCreated: (GoogleMapController controller) {
_controller.complete(controller);
},
),
),
floatingActionButton: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: [
FloatingActionButton(
onPressed: () {
print("The DISTANCE IS $distance");
final points = mp.PolygonUtil.containsLocation(
mp.LatLng(-6.7924, 39.2083), polygonCoord, true);
print("The POIT IS FOUND ON THE FOLLOWING $points");
// final a = mp._userPolyLinesLatLngList;
// print("The POIT IS FOUND ON THE FOLLOWING $a YES");
List<mp.LatLng> polygonCoords = [
mp.LatLng(37.43296265331129, -122.08832357078792),
mp.LatLng(37.43006265331129, -122.08832357078792),
mp.LatLng(37.43006265331129, -122.08332357078792),
mp.LatLng(37.43296265331129, -122.08832357078792)
];
List<LatLng> _userPolyLinesLatLngList = [];
// ignore: unused_local_variable
double a, b;
// var b;
// var lat;
// List<mp.LatLng> _userPolyLinesLatLngListsUser =
// _userPolyLinesLatLngList;
final pointFromGoogleMap = LatLng(90, 0);
final pointMp = mp.LatLng(
pointFromGoogleMap.latitude, pointFromGoogleMap.longitude);
print("The POIT IS FOUND ON THE FOLLOWING $points YES");
if (points == true) {
print("The POIT IS FOUND ON THE FOLLOWING $points YES");
} else {
print("The POIT IS FOUND ON THE FOLLOWING $points No");
}
},
tooltip: 'Drawing',
child: Icon(Icons.menu),
),
FloatingActionButton(
onPressed: _toggleDrawing,
tooltip: 'Drawing',
child: Icon((_drawPolygonEnabled) ? Icons.cancel : Icons.edit),
),
],
),
);
_onPanUpdate(DragUpdateDetails details) async {
// To start draw new polygon every time.
if (_clearDrawing) {
_clearDrawing = false;
_clearPolygons();
}
if (_drawPolygonEnabled) {
double? x, y;
if (Platform.isAndroid) {
// It times in 3 without any meaning,
// We think it's an issue with GoogleMaps package.
x = details.globalPosition.dx * 3;
y = details.globalPosition.dy * 3;
} else if (Platform.isIOS) {
x = details.globalPosition.dx;
y = details.globalPosition.dy;
}
// Round the x and y.
int xCoordinate = x!.round();
int yCoordinate = y!.round();
// Check if the distance between last point is not too far.
// to prevent two fingers drawing.
if (_lastXCoordinate != null && _lastYCoordinate != null) {
var distance = Math.sqrt(Math.pow(xCoordinate - _lastXCoordinate!, 2) +
Math.pow(yCoordinate - _lastYCoordinate!, 2));
// Check if the distance of point and point is large.
if (distance > 80.0) return;
}
// Cached the coordinate.
_lastXCoordinate = xCoordinate;
_lastYCoordinate = yCoordinate;
ScreenCoordinate screenCoordinate =
ScreenCoordinate(x: xCoordinate, y: yCoordinate);
final GoogleMapController controller = await _controller.future;
LatLng latLng = await controller.getLatLng(screenCoordinate);
// mp.LatLng latLngs = await controller.getLatLng(screenCoordinate);
try {
// Add new point to list.
_userPolyLinesLatLngList.add(latLng);
// _userPolyLinesLatLngListsUser.add(latLngs);
_polyLines.removeWhere(
(polyline) => polyline.polylineId.value == 'user_polyline');
_polyLines.add(
Polyline(
polylineId: PolylineId('user_polyline'),
points: _userPolyLinesLatLngList,
width: 2,
color: Colors.blue,
),
);
} catch (e) {
print(" error painting $e");
}
setState(() {});
}
}
// Yes, you cannot use Google Maps LatLng directly. You should convert Google Maps LatLng into Maps Toolkit LatLng, for ex.:
I started by checking if the point is inside polygon and it worked well. my goal is to allow a user to draw a polygon then to use that list to check if there is any point that is inside drawn polygon. I archeved to allow user draw the polygon now I want to check if there is any point inside that polygon.
the list of latLang that make the polygon is
List<LatLng> _userPolyLinesLatLngList = [];
i want to create new list that i can use for map tool kit that List should have LatLang from above list.
Help me to convert that List so as I can assign as List of latlang for toolkit. therefore what I want is two variable of List the above List and new List that i can use on toolkit to check if the point is inside the polygon.
And Here are the complete code that allow user to draw polygon. I want to check if the point is inside polygon.
`import 'dart:async';
import 'dart:collection';
import 'dart:convert';
import 'dart:io';
import 'dart:math' as Math;
import 'package:flutter/material.dart';
import 'package:geocoding/geocoding.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:maps_toolkit/maps_toolkit.dart' as mp;
class MyHomePageMap extends StatefulWidget {
MyHomePageMap({Key? key}) : super(key: key);
@OverRide
_MyHomePageMapState createState() => _MyHomePageMapState();
}
class _MyHomePageMapState extends State {
static final Completer _controller = Completer();
static final CameraPosition _kGooglePlex = CameraPosition(
target: LatLng(37.42796133580664, -122.085749655962),
zoom: 14.4746,
);
final Set _polygons = HashSet();
final Set _polyLines = HashSet();
bool _drawPolygonEnabled = false;
List _userPolyLinesLatLngList = [];
// List<mp.LatLng> _userPolyLinesLatLngListsUser = [];
final pointFromGoogleMap = LatLng(90, 0);
bool _clearDrawing = false;
int? _lastXCoordinate, _lastYCoordinate;
var distanceBetweenPoints = mp.SphericalUtil.computeDistanceBetween(
mp.LatLng(51.5073509, -0.1277583), mp.LatLng(48.856614, 2.3522219));
final cityLondon = mp.LatLng(51.5073509, -0.1277583);
final cityParis = mp.LatLng(48.856614, 2.3522219);
final distance = mp.SphericalUtil.computeDistanceBetween(
mp.LatLng(51.5073509, -0.1277583), mp.LatLng(48.856614, 2.3522219)) /
1000.0;
// List polygony = [
// (37.43296265331129, -122.08832357078792),
// (37.43006265331129, -122.08832357078792),
// (37.43006265331129, -122.08332357078792),
// ];
// print('Distance between London and Paris is $distance km.');
// PolygonUtil.containsLocation - computes whether the given point lies inside the specified polygon.
// final distances = mp.SphericalUtil.computeDistanceBetween(mp.LatLng(51.5073509, -0.1277583), 4.3)
List<mp.LatLng> polygonCoord = [
mp.LatLng(37.43296265331129, -122.08832357078792),
mp.LatLng(37.43006265331129, -122.08832357078792),
mp.LatLng(37.43006265331129, -122.08332357078792),
mp.LatLng(37.43296265331129, -122.08832357078792)
];
@OverRide
Widget build(BuildContext context) {
return Scaffold(
body: GestureDetector(
onPanUpdate: (_drawPolygonEnabled) ? _onPanUpdate : null,
onPanEnd: (_drawPolygonEnabled) ? _onPanEnd : null,
child: GoogleMap(
mapType: MapType.normal,
initialCameraPosition: _kGooglePlex,
polygons: _polygons,
polylines: _polyLines,
onMapCreated: (GoogleMapController controller) {
_controller.complete(controller);
},
),
),
floatingActionButton: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: [
FloatingActionButton(
onPressed: () {
print("The DISTANCE IS $distance");
final points = mp.PolygonUtil.containsLocation(
mp.LatLng(-6.7924, 39.2083), polygonCoord, true);
print("The POIT IS FOUND ON THE FOLLOWING $points");
// final a = mp._userPolyLinesLatLngList;
// print("The POIT IS FOUND ON THE FOLLOWING $a YES");
}
_toggleDrawing() {
_clearPolygons();
setState(() => _drawPolygonEnabled = !_drawPolygonEnabled);
}
_onPanUpdate(DragUpdateDetails details) async {
// To start draw new polygon every time.
if (_clearDrawing) {
_clearDrawing = false;
_clearPolygons();
}
}
// Yes, you cannot use Google Maps LatLng directly. You should convert Google Maps LatLng into Maps Toolkit LatLng, for ex.:
// import 'package:maps_toolkit/maps_toolkit.dart' as mp;
// import 'package:google_maps/google_maps.dart';
// import 'package:test/test.dart';
// void main() {
// final pointFromGoogleMap = LatLng(90, 0);
// final pointMp = mp.LatLng(pointFromGoogleMap.lat, pointFromGoogleMap.lng);
// bool result = mp.PolygonUtil.containsLocation(pointMp, TOTAL_COVERAGE, false);
// }
_onPanEnd(DragEndDetails details) async {
// Reset last cached coordinate
_lastXCoordinate = null;
_lastYCoordinate = null;
}
_clearPolygons() {
setState(() {
_polyLines.clear();
_polygons.clear();
_userPolyLinesLatLngList.clear();
});
}
}
`
The text was updated successfully, but these errors were encountered: