Peta Logistik dengan Folium
Sebagai seorang yang bekerja di bidang logistik dan transportasi, pasti sering kali bersinggungan dengan berbagai jenis data dimana salah satunya adalah peta geolocation. Tulisan ini akan mengulas bagaimana cara memvisualisasikan data latitude dan longitude pada sebuah peta dengan menggunakan Folium Python. Folium bisa melakukan banyak hal, seperti membuat pinpoint, mengganti warna pada peta, membuat radius pada pinpoint, atau memuat peta toposjon. Folium adalah pustaka Python yang memungkinkan Anda membuat peta interaktif menggunakan library . Pustaka ini sangat berguna untuk visualisasi data geospasial.
import csv # Data data = [ ["Pertamina", "Lat", "Long"], ["Prabumulih", -3.440840496, 104.2337601], ["Ramba", -2.6961302, 104.1123653], ["OK", -3.812992204, 104.350026], ["RT", -3.1470553, 104.1163256], ["Adera", -3.262808, 104.1541684], ["Limau", -3.4757064, 104.072869], ["Jambi", -1.6526229, 103.6009533], ["Pendopo", -3.264586, 103.8214948], ["Jambi Merang", -2.0513629, 103.7924965], ["Lirik", -0.2787676, 102.2715392], ["Pangkalan Susu", 4.1198364, 98.2067353], ["Rantau", 4.3330485, 98.0974894], ["Jabodetabek", -6.132770378, 107.0283405], ["Cirebon / Mundu / Subang", -6.6850875, 108.5491675], ["Surabaya", -7.2421686, 112.7354225], ["Cepu", -7.0349444, 111.7428687], ["Sangata", 0.387574, 117.512644], ["Sangasanga", -0.6456044, 117.2364707], ["Tanjung", -2.1496, 115.395564], ["Tarakan", 3.3085805, 117.6044303] ] # Write to CSV with open('pertamina_locations.csv', mode='w', newline='') as file: writer = csv.writer(file) writer.writerows(data) |
Dengan menggunakan pustaka Folium, peta interaktif dapat menampilkan titik-titik tempat pengambilan dan pengiriman barang di wilayah misalnya pulau Jawa, Sumatera, dan Kalimantan. Setiap titik pada peta akan dikelompokkan ke dalam beberapa layer berbeda berdasarkan jenis aktivitasnya, misalnya layer pengambilan barang dan layer pengiriman barang untuk cluster tertentu. Penggunaan layer ini memungkinkan visualisasi yang lebih jelas dan terstruktur, sehingga memudahkan dalam mengidentifikasi lokasi-lokasi strategis untuk operasional logistik.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | import pandas as pd import folium from folium.plugins import MarkerCluster from IPython.display import display # Convert list of lists to a DataFrame df = pd.DataFrame(data[1:], columns=data[0]) # Create a Folium Map m = folium.Map(location=[df['Lat'].mean(), df['Long'].mean()], zoom_start=5) # Define groups with centroids groups = { 'Adera': ["Prabumulih", "Ramba", "OK", "RT"], 'Jambi': ["Prabumulih", "Limau", "Ramba", "Pendopo", "Adera"], 'Jambi Merang': ["Prabumulih", "Limau", "Ramba", "Pendopo", "Adera"], 'Lirik': ["Prabumulih", "Limau", "Ramba", "Pendopo", "Adera"], 'Pangkalan Susu': ["Prabumulih", "Limau", "Ramba", "Pendopo", "Adera"], 'Rantau': ["Prabumulih", "Limau", "Ramba", "Pendopo", "Adera"], 'Jabodetabek': ["Prabumulih", "Limau", "Ramba", "Pendopo", "Adera"], 'Cirebon / Mundu / Subang': ["Prabumulih", "Limau", "Ramba", "Pendopo", "Adera"], 'Surabaya': ["Prabumulih", "Limau", "Ramba", "Pendopo", "Adera"], 'Cepu': ["Prabumulih", "Limau", "Ramba", "Pendopo", "Adera"], 'Sangata': ["Prabumulih", "Limau", "Ramba", "Pendopo", "Adera"], 'Sangasanga': ["Prabumulih", "Limau", "Ramba", "Pendopo", "Adera"], 'Tanjung': ["Prabumulih", "Limau", "Ramba", "Pendopo", "Adera"], 'Tarakan': ["Prabumulih", "Limau", "Ramba", "Pendopo", "Adera"] } # Add markers, centroids, and lines to respective centroid layers for centroid, cities in groups.items(): group_layer = folium.FeatureGroup(name=f'Centroid: {centroid}') centroid_location = df[df["Pertamina"] == centroid][["Lat", "Long"]].values[0] # Add centroid marker for the group folium.Marker(location=centroid_location, popup=f'{centroid} Centroid', icon=folium.Icon(color='red')).add_to(group_layer) for city in cities: city_location = df[df["Pertamina"] == city][["Lat", "Long"]].values[0] folium.Marker(location=city_location, popup=city).add_to(group_layer) folium.PolyLine(locations=[city_location, centroid_location], color="blue").add_to(group_layer) group_layer.add_to(m) # Add layer control to map folium.LayerControl().add_to(m) # Display the map in Jupyter Notebook display(m) |
Output: