ส่วนนี้จะแสดงวิธีใช้ไลบรารีการติดตามฟลีต JavaScript เพื่อดูฟลีต ขั้นตอนเหล่านี้จะถือว่าคุณได้ตั้งค่าไลบรารีการติดตามยานพาหนะและโหลดแผนที่แล้ว โปรดดูรายละเอียดที่หัวข้อตั้งค่าไลบรารีการติดตามยานพาหนะ JavaScript
เอกสารนี้จะกล่าวถึงสิ่งที่คุณทําได้เมื่อดูกลุ่มยานยนต์
- เริ่มติดตามฝูงรถ
- ฟังเหตุการณ์และจัดการข้อผิดพลาด
- หยุดติดตาม
- ติดตามยานพาหนะคันเดียวขณะดูกลุ่มยานพาหนะ
เริ่มติดตามกลุ่ม
หากต้องการติดตามกลุ่มรถ คุณต้องสร้างอินสแตนซ์ของผู้ให้บริการตำแหน่งของกลุ่มรถและตั้งค่าข้อจำกัดตำแหน่งสำหรับวิวพอร์ตแผนที่ตามที่อธิบายไว้ในส่วนต่อไปนี้
สร้างอินสแตนซ์ผู้ให้บริการตำแหน่งของกลุ่มอุปกรณ์
ไลบรารีการติดตามยานพาหนะด้วย JavaScript มีผู้ให้บริการตำแหน่งที่ดึงข้อมูลยานพาหนะหลายคันจาก Fleet Engine
หากต้องการสร้างอินสแตนซ์ ให้ทําตามขั้นตอนต่อไปนี้
ใช้รหัสโปรเจ็กต์ รวมถึงการอ้างอิงถึงเครื่องมือรับข้อมูลโทเค็น
ใช้คำค้นหาตัวกรองยานพาหนะ คำค้นหาตัวกรองยานพาหนะจะควบคุมว่าแผนที่จะแสดงยานพาหนะใด ระบบจะส่งตัวกรองไปยัง Fleet Engine
- สำหรับบริการแบบออนดีมานด์ ให้ใช้
vehicleFilter
และอ่านListVehiclesRequest.filter
- สำหรับงานที่ตั้งเวลาไว้ ให้ใช้
deliveryVehicleFilter
แล้วตรวจสอบListDeliveryVehiclesRequest.filter
- สำหรับบริการแบบออนดีมานด์ ให้ใช้
กำหนดขอบเขตการแสดงยานพาหนะ ใช้
locationRestriction
เพื่อจำกัดพื้นที่ที่จะแสดงยานพาหนะบนแผนที่ ผู้ให้บริการตำแหน่งจะไม่ทำงานจนกว่าจะตั้งค่านี้ คุณสามารถกําหนดขอบเขตตําแหน่งได้ทั้งในคอนสตรคเตอร์หรือหลังคอนสตรคเตอร์เริ่มต้นมุมมองแผนที่
ตัวอย่างต่อไปนี้แสดงวิธีสร้างอินสแตนซ์ของผู้ให้บริการตำแหน่งของฝูงรถสำหรับทั้งสถานการณ์แบบออนดีมานด์และแบบกำหนดเวลา ตัวอย่างเหล่านี้ยังแสดงวิธีใช้ locationRestriction
ในคอนสตรัคเตอร์เพื่อให้ผู้ให้บริการตำแหน่งทำงาน
การเดินทางแบบออนดีมานด์
JavaScript
locationProvider =
new google.maps.journeySharing
.FleetEngineFleetLocationProvider({
projectId,
authTokenFetcher,
// Optionally, specify location bounds to
// limit which vehicles are
// retrieved and immediately start tracking.
locationRestriction: {
north: 37.3,
east: -121.8,
south: 37.1,
west: -122,
},
// Optionally, specify a filter to limit
// which vehicles are retrieved.
vehicleFilter:
'attributes.foo = "bar" AND attributes.baz = "qux"',
});
TypeScript
locationProvider =
new google.maps.journeySharing
.FleetEngineFleetLocationProvider({
projectId,
authTokenFetcher,
// Optionally, specify location bounds to
// limit which vehicles are
// retrieved and immediately start tracking.
locationRestriction: {
north: 37.3,
east: -121.8,
south: 37.1,
west: -122,
},
// Optionally, specify a filter to limit
// which vehicles are retrieved.
vehicleFilter:
'attributes.foo = "bar" AND attributes.baz = "qux"',
});
งานที่กำหนดเวลาไว้
JavaScript
locationProvider =
new google.maps.journeySharing
.FleetEngineDeliveryFleetLocationProvider({
projectId,
authTokenFetcher,
// Optionally, specify location bounds to
// limit which delivery vehicles are
// retrieved and immediately make the location provider active.
locationRestriction: {
north: 37.3,
east: -121.8,
south: 37.1,
west: -122,
},
// Optionally, specify a filter to limit
// which delivery vehicles are retrieved.
deliveryVehicleFilter:
'attributes.foo = "bar" AND attributes.baz = "qux"',
});
TypeScript
locationProvider =
new google.maps.journeySharing
.FleetEngineDeliveryFleetLocationProvider({
projectId,
authTokenFetcher,
// Optionally, specify location bounds to
// limit which delivery vehicles are
// retrieved and immediately make the location provider active.
locationRestriction: {
north: 37.3,
east: -121.8,
south: 37.1,
west: -122,
},
// Optionally, specify a filter to limit
// which delivery vehicles are retrieved.
deliveryVehicleFilter:
'attributes.foo = "bar" AND attributes.baz = "qux"',
});
หากต้องการตั้งค่า locationRestriction
หลังตัวสร้าง ให้เพิ่ม locationProvider.locationRestriction
ในโค้ดในภายหลังดังที่แสดงในตัวอย่าง JavaScript ต่อไปนี้
// You can choose to not set locationRestriction in the constructor.
// In this case, the location provider *DOES NOT START* after this line, because
// no locationRestriction is set.
locationProvider = new google.maps.journeySharing.DeliveryFleetLocationProvider({
... // not setting locationRestriction here
});
// You can then set the locationRestriction *after* the constructor.
// After this line, the location provider is active.
locationProvider.locationRestriction = {
north: 1,
east: 2,
south: 0,
west: 1,
};
ตั้งค่าการจํากัดตําแหน่งโดยใช้วิวพอร์ตแผนที่
นอกจากนี้ คุณยังกำหนดขอบเขตlocationRestriction
ให้ตรงกับพื้นที่ที่มองเห็นในมุมมองแผนที่ได้
การเดินทางแบบออนดีมานด์
JavaScript
google.maps.event.addListenerOnce(
mapView.map, 'bounds_changed', () => {
const bounds = mapView.map.getBounds();
if (bounds) {
// If you did not specify a location restriction in the
// location provider constructor, you may do so here.
// Location tracking will start as soon as this is set.
locationProvider.locationRestriction = bounds;
}
});
TypeScript
google.maps.event.addListenerOnce(
mapView.map, 'bounds_changed', () => {
const bounds = mapView.map.getBounds();
if (bounds) {
// If you did not specify a location restriction in the
// location provider constructor, you may do so here.
// Location tracking will start as soon as this is set.
locationProvider.locationRestriction = bounds;
}
});
งานที่กำหนดเวลาไว้
JavaScript
google.maps.event.addListenerOnce(
mapView.map, 'bounds_changed', () => {
const bounds = mapView.map.getBounds();
if (bounds) {
// If you did not specify a location restriction in the
// location provider constructor, you may do so here.
// Location provider will start as soon as this is set.
locationProvider.locationRestriction = bounds;
}
});
TypeScript
google.maps.event.addListenerOnce(
mapView.map, 'bounds_changed', () => {
const bounds = mapView.map.getBounds();
if (bounds) {
// If you did not specify a location restriction in the
// location provider constructor, you may do so here.
// Location provider will start as soon as this is set.
locationProvider.locationRestriction = bounds;
}
});
เริ่มต้นมุมมองแผนที่
เมื่อสร้างผู้ให้บริการตำแหน่งแล้ว ให้เริ่มต้นใช้งานมุมมองแผนที่ในลักษณะเดียวกับเมื่อติดตามยานพาหนะคันเดียว
หลังจากโหลดไลบรารีการแชร์เส้นทาง JavaScript ให้เริ่มต้นใช้งานมุมมองแผนที่และเพิ่มลงในหน้า HTML หน้าเว็บควรมีองค์ประกอบ <div> ที่เก็บมุมมองแผนที่ องค์ประกอบ <div> มีชื่อว่า map_canvas ในตัวอย่างต่อไปนี้=
การเดินทางแบบออนดีมานด์
JavaScript
const mapView = new
google.maps.journeySharing.JourneySharingMapView({
element: document.getElementById('map_canvas'),
locationProviders: [locationProvider],
});
// If you did not specify a vehicle ID in the
// location provider constructor, you may do so here.
// Location tracking will start as soon as this is set.
locationProvider.vehicleId
= 'your-vehicle-id';
// Give the map an initial viewport to allow it to
// initialize; otherwise the 'ready' event above may
// not fire. The user also has access to the mapView
// object to customize as they want.
mapView.map.setCenter('Times Square, New York, NY');
mapView.map.setZoom(14);
TypeScript
const mapView = new
google.maps.journeySharing.JourneySharingMapView({
element: document.getElementById('map_canvas'),
locationProviders: [locationProvider],
});
// If you did not specify a vehicle ID in the
// location provider constructor, you may do so here.
// Location tracking will start as soon as this is set.
locationProvider.VehicleId
= 'your-vehicle-id';
// Give the map an initial viewport to allow it to
// initialize; otherwise the 'ready' event above may
// not fire. The user also has access to the mapView
// object to customize as they want.
mapView.map.setCenter('Times Square, New York, NY');
mapView.map.setZoom(14);
งานที่กำหนดเวลาไว้
JavaScript
const mapView = new
google.maps.journeySharing.JourneySharingMapView({
element: document.getElementById('map_canvas'),
locationProviders: [locationProvider],
});
// If you did not specify a delivery vehicle ID in the
// location provider constructor, you may do so here.
// Location tracking will start as soon as this is set.
locationProvider.deliveryVehicleId
= 'your-delivery-vehicle-id';
// Give the map an initial viewport to allow it to
// initialize; otherwise the 'ready' event above may
// not fire. The user also has access to the mapView
// object to customize as they want.
mapView.map.setCenter('Times Square, New York, NY');
mapView.map.setZoom(14);
TypeScript
const mapView = new
google.maps.journeySharing.JourneySharingMapView({
element: document.getElementById('map_canvas'),
locationProviders: [locationProvider],
});
// If you did not specify a delivery vehicle ID in the
// location provider constructor, you may do so here.
// Location tracking will start as soon as this is set.
locationProvider.deliveryVehicleId
= 'your-delivery-vehicle-id';
// Give the map an initial viewport to allow it to
// initialize; otherwise the 'ready' event above may
// not fire. The user also has access to the mapView
// object to customize as they want.
mapView.map.setCenter('Times Square, New York, NY');
mapView.map.setZoom(14);
รอรับเหตุการณ์และจัดการข้อผิดพลาด
เมื่อเริ่มติดตามกลุ่มแล้ว คุณต้องรอฟังการเปลี่ยนแปลงของเหตุการณ์และจัดการข้อผิดพลาดที่เกิดขึ้นตามที่อธิบายไว้ในส่วนต่อไปนี้
รอรับเหตุการณ์การเปลี่ยนแปลง
คุณสามารถเรียกข้อมูลเมตาเกี่ยวกับกลุ่มรถจากออบเจ็กต์ยานพาหนะได้โดยใช้ผู้ให้บริการตำแหน่ง การเปลี่ยนแปลงข้อมูลเมตาจะทริกเกอร์เหตุการณ์อัปเดต โดยข้อมูลเมตาประกอบด้วยพร็อพเพอร์ตี้ของยานพาหนะ เช่น สถานะการนำทาง ระยะทางที่เหลือ และแอตทริบิวต์ที่กำหนดเอง
โปรดดูรายละเอียดที่หัวข้อต่อไปนี้
- ข้อมูลอ้างอิงตัวเลือกยานพาหนะสำหรับการเดินทางแบบออนดีมานด์
- ข้อมูลอ้างอิงตัวเลือกยานพาหนะสำหรับงานที่กำหนดเวลาไว้
ตัวอย่างต่อไปนี้แสดงวิธีฟังเหตุการณ์การเปลี่ยนแปลงเหล่านี้
การเดินทางแบบออนดีมานด์
JavaScript
locationProvider.addListener('update', e => {
// e.vehicles contains data that may be
// useful to the rest of the UI.
for (vehicle of e.vehicles) {
console.log(vehicle.navigationStatus);
}
});
TypeScript
locationProvider.addListener('update',
(e: google.maps.journeySharing.FleetEngineFleetLocationProviderUpdateEvent) => {
// e.vehicles contains data that may be
// useful to the rest of the UI.
if (e.vehicles) {
for (vehicle of e.vehicles) {
console.log(vehicle.navigationStatus);
}
}
});
งานที่กำหนดเวลาไว้
JavaScript
locationProvider.addListener('update', e => {
// e.deliveryVehicles contains data that may be
// useful to the rest of the UI.
if (e.deliveryVehicles) {
for (vehicle of e.deliveryVehicles) {
console.log(vehicle.remainingDistanceMeters);
}
}
});
TypeScript
locationProvider.addListener('update',
(e: google.maps.journeySharing.FleetEngineDeliveryFleetLocationProviderUpdateEvent) => {
// e.deliveryVehicles contains data that may be
// useful to the rest of the UI.
if (e.deliveryVehicles) {
for (vehicle of e.deliveryVehicles) {
console.log(vehicle.remainingDistanceMeters);
}
}
});
ฟังหาข้อผิดพลาด
นอกจากนี้ คุณยังต้องคอยฟังและจัดการข้อผิดพลาดที่เกิดขึ้นขณะติดตามยานพาหนะด้วย ข้อผิดพลาดที่เกิดขึ้นแบบไม่พร้อมกันจากการขอข้อมูลยานพาหนะจะทริกเกอร์เหตุการณ์ข้อผิดพลาด
ตัวอย่างต่อไปนี้แสดงวิธีรอเหตุการณ์เหล่านี้เพื่อให้คุณจัดการข้อผิดพลาดได้
JavaScript
locationProvider.addListener('error', e => {
// e.error is the error that triggered the event.
console.error(e.error);
});
TypeScript
locationProvider.addListener('error', (e: google.maps.ErrorEvent) => {
// e.error is the error that triggered the event.
console.error(e.error);
});
หยุดติดตามกลุ่ม
หากต้องการหยุดติดตามกลุ่มรถ ให้ตั้งค่าขอบเขตของผู้ให้บริการตำแหน่งเป็น "Null" แล้วนำผู้ให้บริการตำแหน่งออกจากมุมมองแผนที่ตามที่อธิบายไว้ในส่วนต่อไปนี้
ตั้งค่าขอบเขตของผู้ให้บริการตำแหน่งเป็น Null
หากต้องการหยุดไม่ให้ผู้ให้บริการตำแหน่งติดตามกลุ่มรถ ให้ตั้งค่าขอบเขตของผู้ให้บริการตำแหน่งเป็น Null
การเดินทางแบบออนดีมานด์
JavaScript
locationProvider.locationRestriction = null;
TypeScript
locationProvider.locationRestriction = null;
งานที่กำหนดเวลาไว้
JavaScript
locationProvider.locationRestriction = null;
TypeScript
locationProvider.locationRestriction = null;
นำผู้ให้บริการตำแหน่งออกจากมุมมองแผนที่
ตัวอย่างต่อไปนี้แสดงวิธีนำผู้ให้บริการตำแหน่งออกจากมุมมองแผนที่
JavaScript
mapView.removeLocationProvider(locationProvider);
TypeScript
mapView.removeLocationProvider(locationProvider);
ติดตามยานพาหนะนำส่งขณะดูกลุ่มยานพาหนะนำส่ง
หากใช้บริการ Mobility สำหรับงานที่กำหนดเวลาไว้ คุณจะดูทั้งกลุ่มยานพาหนะ รวมถึงแสดงเส้นทางและงานที่กำลังจะเกิดขึ้นสำหรับยานพาหนะนำส่งคันใดคันหนึ่งได้ในมุมมองแผนที่เดียวกัน โดยสร้างอินสแตนซ์ทั้งผู้ให้บริการตำแหน่งของกลุ่มรถจัดส่งและผู้ให้บริการตำแหน่งของยานพาหนะนำส่ง แล้วเพิ่มทั้ง 2 รายการลงในมุมมองแผนที่ เมื่อสร้างอินสแตนซ์แล้ว ผู้ให้บริการตำแหน่งของกลุ่มยานพาหนะนำส่งจะเริ่มแสดงยานพาหนะนำส่งบนแผนที่ ตัวอย่างต่อไปนี้แสดงวิธีสร้างอินสแตนซ์ของทั้ง 2 ผู้ให้บริการตำแหน่ง
JavaScript
deliveryFleetLocationProvider =
new google.maps.journeySharing
.FleetEngineDeliveryFleetLocationProvider({
projectId,
authTokenFetcher,
// Optionally, specify location bounds to
// limit which delivery vehicles are
// retrieved and immediately start tracking.
locationRestriction: {
north: 37.3,
east: -121.8,
south: 37.1,
west: -122,
},
// Optionally, specify a filter to limit
// which delivery vehicles are retrieved.
deliveryVehicleFilter:
'attributes.foo = "bar" AND attributes.baz = "qux"',
});
deliveryVehicleLocationProvider =
new google.maps.journeySharing
.FleetEngineDeliveryVehicleLocationProvider({
projectId,
authTokenFetcher
});
const mapView = new
google.maps.journeySharing.JourneySharingMapView({
element: document.getElementById('map_canvas'),
locationProviders: [
deliveryFleetLocationProvider,
deliveryVehicleLocationProvider,
],
// Any other options
});
TypeScript
deliveryFleetLocationProvider =
new google.maps.journeySharing
.FleetEngineDeliveryFleetLocationProvider({
projectId,
authTokenFetcher,
// Optionally, specify location bounds to
// limit which delivery vehicles are
// retrieved and immediately start tracking.
locationRestriction: {
north: 37.3,
east: -121.8,
south: 37.1,
west: -122,
},
// Optionally, specify a filter to limit
// which delivery vehicles are retrieved.
deliveryVehicleFilter:
'attributes.foo = "bar" AND attributes.baz = "qux"',
});
deliveryVehicleLocationProvider =
new google.maps.journeySharing
.FleetEngineDeliveryVehicleLocationProvider({
projectId,
authTokenFetcher
});
const mapView = new
google.maps.journeySharing.JourneySharingMapView({
element: document.getElementById('map_canvas'),
locationProviders: [
deliveryFleetLocationProvider,
deliveryVehicleLocationProvider,
],
// Any other options
});
ใช้การกำหนดค่าเครื่องหมายเพื่อติดตามยานพาหนะนำส่ง
หากต้องการเปิดใช้ผู้ให้บริการตำแหน่งยานพาหนะนำส่งเพื่อติดตามยานพาหนะนำส่งเมื่อคุณคลิกเครื่องหมายฝูงรถ ให้ทำตามขั้นตอนต่อไปนี้
ปรับแต่งเครื่องหมายและเพิ่มการดําเนินการด้วยการคลิก
ซ่อนเครื่องหมายเพื่อป้องกันไม่ให้มีเครื่องหมายที่ซ้ำกัน
ตัวอย่างของขั้นตอนเหล่านี้อยู่ในส่วนต่อไปนี้
ปรับแต่งเครื่องหมายและเพิ่มการดําเนินการด้วยการคลิก
JavaScript
// Specify the customization function either separately, or as a field in
// the options for the delivery fleet location provider constructor.
deliveryFleetLocationProvider.deliveryVehicleMarkerCustomization =
(params) => {
if (params.isNew) {
params.marker.addListener('click', () => {
// params.vehicle.name follows the format
// "providers/{provider}/deliveryVehicles/{vehicleId}".
// Only the vehicleId portion is used for the delivery vehicle
// location provider.
deliveryVehicleLocationProvider.deliveryVehicleId =
params.vehicle.name.split('/').pop();
});
}
};
TypeScript
// Specify the customization function either separately, or as a field in
// the options for the delivery fleet location provider constructor.
deliveryFleetLocationProvider.deliveryVehicleMarkerCustomization =
(params: google.maps.journeySharing.DeliveryVehicleMarkerCustomizationFunctionParams) => {
if (params.isNew) {
params.marker.addListener('click', () => {
// params.vehicle.name follows the format
// "providers/{provider}/deliveryVehicles/{vehicleId}".
// Only the vehicleId portion is used for the delivery vehicle
// location provider.
deliveryVehicleLocationProvider.deliveryVehicleId =
params.vehicle.name.split('/').pop();
});
}
};
ซ่อนเครื่องหมายเพื่อป้องกันไม่ให้มีเครื่องหมายที่ซ้ำกัน
ซ่อนเครื่องหมายจากผู้ให้บริการตำแหน่งยานพาหนะนำส่งเพื่อป้องกันไม่ให้แสดงผลเครื่องหมาย 2 เครื่องสำหรับยานพาหนะคันเดียวกัน โดยทำดังนี้
JavaScript
// Specify the customization function either separately, or as a field in
// the options for the delivery vehicle location provider constructor.
deliveryVehicleLocationProvider.deliveryVehicleMarkerCustomization =
(params) => {
if (params.isNew) {
params.marker.setVisible(false);
}
};
TypeScript
// Specify the customization function either separately, or as a field in
// the options for the delivery vehicle location provider constructor.
deliveryVehicleLocationProvider.deliveryVehicleMarkerCustomization =
(params: deliveryVehicleMarkerCustomizationFunctionParams) => {
if (params.isNew) {
params.marker.setVisible(false);
}
};