Heim > Artikel > Web-Frontend > Bestimmen der Koordinaten, die sich in einem bestimmten Geofence befinden, mit Turf.js
In diesem Artikel möchte ich mitteilen, wie man die Koordinaten eines bestimmten Geofence mithilfe von Turf.js ermittelt. Bevor wir auf weitere Erklärungen eingehen, müssen wir zunächst verstehen, was ein Geofence ist.
Geofence ist ein durch geografische Grenzen definiertes Gebiet. In diesem Zusammenhang kann Geofence verwendet werden, um festzustellen, ob ein Koordinatenpunkt innerhalb oder außerhalb eines bestimmten Geofence liegt.
Um festzustellen, ob ein Koordinatenpunkt innerhalb oder außerhalb eines Geofence liegt, können wir einen Algorithmus namens „Punkt im Polygon“ verwenden. Dieser Algorithmus vergleicht die Koordinaten des Punktes mit den Grenzen des Geofence und bestimmt, ob der Punkt innerhalb oder außerhalb des Geofence liegt.
Dieser Algorithmus kann mit verschiedenen Programmiersprachen, einschließlich JavaScript, implementiert werden. Mit Turf.js können wir diesen Algorithmus einfach implementieren, um zu bestimmen, ob ein Koordinatenpunkt innerhalb oder außerhalb eines bestimmten Geofence liegt.
Bevor wir beginnen, stellen Sie sicher, dass Turf.js installiert ist
npm install @turf/turf
Als nächstes erstellen wir Geofence-Daten, die wir zum Testen des Point-in-Polygon-Algorithmus verwenden. Wir werden zwei Geofences erstellen, nämlich Geofence A und Geofence B. Im realen Fall werden wir wahrscheinlich mehr Geofence-Daten verwenden.
const geofences = [{ name: "GEOFENCE A", area: "POLYGON ((-3.7217298785969 115.63838090675, -3.7220537413814 115.63826288955, -3.7223187199346 115.63816096562, -3.7225248143097 115.63800003307, -3.722653288701 115.63812341469, -3.7227978223688 115.63841577547, -3.7229048843297 115.63859548347, -3.7229209436227 115.63871886509, -3.7227576741301 115.63893880623, -3.7225248143097 115.63905950563, -3.7222705420217 115.63909437435, -3.7220912131008 115.63894148844, -3.7217057896247 115.63839968221, -3.7217298785969 115.63838090675))", }, { name: "Geofence B", area: "POLYGON ((-3.5699621771882275 115.63114368378018, -3.5702533651161104 115.63077406680864, -3.570797790703304 115.63111814910975, -3.571560426039895 115.63171246019817, -3.57190071482121 115.63216460943543, -3.5718740282540185 115.63274971077597, -3.5715080520186318 115.63328235185222, -3.571560820118364 115.63401612755369, -3.570722133147773 115.63472029448724, -3.570180630987183 115.63457002462798, -3.5697266007773276 115.63434087693018, -3.5693196959252274 115.63479148804018, -3.5691590755393277 115.63496314942017, -3.5686665061805276 115.63457691132018, -3.5692982798754276 115.63397609650018, -3.5699835932226276 115.63331090867018, -3.5703262497044275 115.63302123009018, -3.5706046580017277 115.63276373803018, -3.5705189939192272 115.63218438088018, -3.5700799653710273 115.63169085442019, -3.5699621771882275 115.63114368378018))", }, ]
Als nächstes erstellen wir die Koordinaten, die wir zum Testen des Point-in-Polygon-Algorithmus verwenden. Wir werden zwei Koordinatenpunkte erstellen, nämlich LKW A und LKW B.
const trucks = [{ id: "Truck A", location: [-3.57011986, 115.633629] }, { id: "Truck B", location: [-3.7403366, 115.6200883] }, ];
Da die uns vorliegenden Geofence-Daten in String-Form vorliegen, müssen wir sie in ein Koordinatenarray umwandeln, das von Turf.js verwendet werden kann. Hier ist eine Funktion zum Konvertieren von Geofence-Daten in ein Koordinatenarray, das von Turf.js verwendet werden kann:
function formatGeofences(geofences) { return geofences .map((geofence) => { if (!geofence.area || typeof geofence.area !== "string") { console.warn(`Area for geofence ${geofence.name} is missing or invalid.`); return null; } try { // Mengambil bagian dalam dari string POLYGON ((...)) const coordinatesString = geofence.area.replace("POLYGON ((", "").replace("))", ""); // Mengonversi string koordinat menjadi array koordinat [lat, lng] let coordinates = coordinatesString.split(", ").map((point) => { const [lat, lng] = point.split(" ").map(Number); return [lat, lng]; }); // Memastikan geofence tertutup (titik pertama sama dengan titik terakhir) const isClosedPolygon = coordinates[0][0] === coordinates[coordinates.length - 1][0] && coordinates[0][1] === coordinates[coordinates.length - 1][1]; if (!isClosedPolygon) { console.warn(`Geofence ${geofence.name} is not a closed polygon and will be removed.`); return null; } return { name: geofence.name, geofence: coordinates, }; } catch (error) { console.error(`Error formatting geofence ${geofence.name}:`, error); return null; } }) .filter(Boolean); // Delete null from array }
Sobald wir die Geofence-Daten und Punktkoordinaten haben, können wir Turf.js verwenden, um den Point-in-Polygon-Algorithmus zu implementieren. Hier ist eine Funktion zum Testen, ob ein Koordinatenpunkt innerhalb oder außerhalb eines bestimmten Geofence liegt:
const turf = require("@turf/turf"); const { geofences } = require("./geofences"); function checkTrucksInGeofences(trucks, geofences) { const results = []; for (const truck of trucks) { const point = turf.point(truck.location); let isInAnyGeofence = false; for (const geofence of geofences) { const polygon = turf.polygon([geofence.geofence]); // Validasi geofence polygon untuk memastikan titik pertama dan terakhir sama const isClosedPolygon = JSON.stringify(geofence.geofence[0]) === JSON.stringify(geofence.geofence[geofence.geofence.length - 1]); if (!isClosedPolygon) { console.warn(`Geofence ${geofence.name} is not a closed polygon.`); continue; } // Cek apakah truk berada dalam geofence const isInGeofence = turf.booleanPointInPolygon(point, polygon); if (isInGeofence) { results.push({ id: truck.id, geofence: geofence.name }); isInAnyGeofence = true; break; // Berhenti jika truk ditemukan dalam geofence } } // Jika truk tidak ditemukan dalam geofence mana pun, atau data tidak valid, tandai dengan `null` if (!isInAnyGeofence) { results.push({ id: truck.id, geofence: null }); } } return results; } // Memanggil fungsi dan mencetak hasilnya const truckLocations = checkTrucksInGeofences(trucks, geofencesNew); console.log(truckLocations);
In diesem Tutorial haben wir den Point-in-Polygon-Algorithmus erfolgreich mit Turf.js implementiert. Mit Turf.js können wir ganz einfach testen, ob ein Koordinatenpunkt innerhalb oder außerhalb eines bestimmten Geofence liegt.
Das obige ist der detaillierte Inhalt vonBestimmen der Koordinaten, die sich in einem bestimmten Geofence befinden, mit Turf.js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!