Cara Membuat Aplikasi Pengoptimuman Laluan Berbilang Henti dengan API Peta TomTom

WBOY
Lepaskan: 2024-08-14 18:50:02
asal
145 orang telah melayarinya

Siaran ini akan memandu anda membuat aplikasi ride-a-request menggunakan API Peta TomTom. Aplikasi ini akan membolehkan pengguna memasukkan berbilang lokasi jemput dan hantar, mengira laluan optimum dan memaparkannya pada peta. Kami akan merangkumi segala-galanya daripada mendapatkan kunci API hingga memaparkan laluan yang dioptimumkan pada peta.

Langkah 1: Sediakan API TomTom
Sebelum menyelami kod tersebut, anda perlu mendaftar di Portal Pembangun TomTom dan mendapatkan kunci API. Kunci ini akan membolehkan anda mengakses perkhidmatan TomTom seperti penghalaan, pengekodan geo dan peta.

Langkah 2: Melaksanakan Fungsi Permintaan Perjalanan
Teras aplikasi melibatkan pengumpulan alamat, menukarnya kepada koordinat, dan mengira laluan optimum. Begini cara anda boleh melakukannya:

def ride_request(request): if request.method == 'POST': form = RideForm(request.POST) if form.is_valid(): ride = form.save(commit=False) # Get coordinates for the pickup and drop locations pickup_coords = get_coordinates(ride.pickup_address) pickup_coords_1 = get_coordinates(ride.pickup_address_1) pickup_coords_2 = get_coordinates(ride.pickup_address_2) drop_coords = get_coordinates(ride.drop_address) # Ensure all coordinates are available if all([pickup_coords, pickup_coords_1, pickup_coords_2, drop_coords]): # Set the coordinates ride.pickup_latitude, ride.pickup_longitude = pickup_coords ride.pickup_latitude_1, ride.pickup_longitude_1 = pickup_coords_1 ride.pickup_latitude_2, ride.pickup_longitude_2 = pickup_coords_2 ride.drop_latitude, ride.drop_longitude = drop_coords # Save the ride and redirect to the success page try: ride.save() return redirect('success_page', pickup_lon=ride.pickup_longitude, pickup_lat=ride.pickup_latitude, pickup_lon_1=ride.pickup_longitude_1, pickup_lat_1=ride.pickup_latitude_1, pickup_lon_2=ride.pickup_longitude_2, pickup_lat_2=ride.pickup_lat_2, drop_lon=ride.drop_longitude, drop_lat=ride.drop_latitude) except IntegrityError as e: messages.error(request, f'IntegrityError: {str(e)}') else: messages.error(request, 'Error getting coordinates. Please try again.') else: form = RideForm() return render(request, 'maps/ride_request.html', {'form': form})
Salin selepas log masuk

Dalam coretan ini, aplikasi menerima input pengguna untuk berbilang alamat, menukar alamat ini kepada koordinat menggunakan fungsi get_koordinat dan menyimpan data untuk kegunaan kemudian.

def get_coordinates(address): """ Get coordinates (latitude, longitude) for a given address using TomTom Geocoding API. """ api_key = 'YOUR_TOMTOM_API_KEY' base_url = 'https://api.tomtom.com/search/2/geocode/{address}.json' # Prepare the URL with the address and API key url = base_url.format(address=address) params = {'key': api_key} # Make the request to TomTom Geocoding API response = requests.get(url, params=params) data = response.json() # Check if the request was successful if response.status_code == 200 and data.get('results'): # Extract coordinates from the response result = data['results'][0] if 'position' in result: coordinates = result['position'] return coordinates.get('lat'), coordinates.get('lon') else: print( f"Error getting coordinates for {address}: 'position' key not found in the response.") return None else: # Handle errors or return a default value print( f"Error getting coordinates for {address}: {data.get('message')}") return None
Salin selepas log masuk

Langkah 3: Mengira Laluan Dioptimumkan
Sebaik sahaja anda mempunyai koordinat, langkah seterusnya ialah mengira laluan yang dioptimumkan. API Pengoptimuman Waypoint TomTom membantu dalam menentukan laluan paling cekap antara berbilang titik.

def get_optimized_route(*pickup_coords, drop_coords): api_key = 'YOUR_TOMTOM_API_KEY' # Prepare the payload for the API payload = { 'waypoints': [{'point': {'latitude': lat, 'longitude': lon}} for lon, lat in pickup_coords], 'options': {'travelMode': 'car'}, } # Add the drop location to the waypoints payload['waypoints'].append({'point': {'latitude': drop_coords[1], 'longitude': drop_coords[0]}}) # API request response = requests.post(f'https://api.tomtom.com/routing/waypointoptimization/1', params={'key': api_key}, json=payload) if response.status_code == 200: data = response.json() if 'optimizedOrder' in data: # Extract the optimized route return [get_route_geometry(pickup_coords[i], pickup_coords[j]) for i, j in zip(data['optimizedOrder'], data['optimizedOrder'][1:])] return None
Salin selepas log masuk

Fungsi ini menghantar permintaan kepada API TomTom, menerima susunan titik laluan yang dioptimumkan, dan kemudian mengira geometri laluan.

Langkah 4: Memaparkan Peta dan Laluan
Akhir sekali, selepas memperoleh data laluan yang dioptimumkan, tiba masanya untuk memaparkan peta pada success_page.html anda.

{% load static %}      Ride Request - Success     
Salin selepas log masuk

Kod HTML ini memulakan peta TomTom, meletakkan penanda pada titik pengambilan dan penghantaran serta melukis laluan di antara mereka.

Keputusan: Borang Permintaan Ride & Peta Kejayaan

How to Create a Multi-Stop Route Optimization Application with TomTom Maps API

How to Create a Multi-Stop Route Optimization Application with TomTom Maps API

Nota: Kod yang disediakan di atas ialah contoh ringkas untuk menunjukkan kefungsian asas meminta perjalanan dan mengira laluan menggunakan API TomTom. Pelaksanaan sebenar mungkin berbeza dan termasuk ciri atau variasi tambahan berdasarkan keperluan khusus. Untuk maklumat lebih terperinci dan penggunaan lanjutan, sila rujuk Dokumentasi Pembangun TomTom rasmi.

Atas ialah kandungan terperinci Cara Membuat Aplikasi Pengoptimuman Laluan Berbilang Henti dengan API Peta TomTom. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!