|
|
""" |
|
|
Example usage of Google Maps Platform tools in EvoAgentX |
|
|
|
|
|
This example demonstrates how to use the various Google Maps tools |
|
|
for geocoding, places search, directions, and more. |
|
|
|
|
|
Prerequisites: |
|
|
1. Google Maps Platform API key with the following APIs enabled: |
|
|
- Geocoding API |
|
|
- Places API |
|
|
- Directions API |
|
|
- Distance Matrix API |
|
|
- Time Zone API |
|
|
|
|
|
2. Set your API key as an environment variable: |
|
|
export GOOGLE_MAPS_API_KEY="your_api_key_here" |
|
|
|
|
|
Note: The GoogleMapsToolkit will automatically retrieve the API key from |
|
|
the environment variable, making it compatible with AI agents. |
|
|
""" |
|
|
|
|
|
import os |
|
|
from evoagentx.tools import GoogleMapsToolkit |
|
|
|
|
|
def main(): |
|
|
|
|
|
gmaps_toolkit = GoogleMapsToolkit() |
|
|
|
|
|
|
|
|
if not gmaps_toolkit.google_maps_base.api_key: |
|
|
print("Please set GOOGLE_MAPS_API_KEY environment variable") |
|
|
print("Get your API key from: https://console.cloud.google.com/apis/") |
|
|
return |
|
|
|
|
|
print("=== Google Maps Platform Tools Demo ===\n") |
|
|
|
|
|
|
|
|
print("1. Geocoding Address to Coordinates") |
|
|
geocode_tool = gmaps_toolkit.get_tool("geocode_address") |
|
|
result = geocode_tool(address="1600 Amphitheatre Parkway, Mountain View, CA") |
|
|
|
|
|
if result["success"]: |
|
|
print(f"Address: {result['formatted_address']}") |
|
|
print(f"Coordinates: {result['latitude']}, {result['longitude']}") |
|
|
print(f"Place ID: {result['place_id']}") |
|
|
|
|
|
|
|
|
lat, lng = result['latitude'], result['longitude'] |
|
|
else: |
|
|
print(f"Geocoding failed: {result['error']}") |
|
|
return |
|
|
|
|
|
print("\n" + "="*50 + "\n") |
|
|
|
|
|
|
|
|
print("2. Reverse Geocoding Coordinates to Address") |
|
|
reverse_geocode_tool = gmaps_toolkit.get_tool("reverse_geocode") |
|
|
result = reverse_geocode_tool(latitude=lat, longitude=lng) |
|
|
|
|
|
if result["success"]: |
|
|
print(f"Coordinates: {result['latitude']}, {result['longitude']}") |
|
|
print("Addresses found:") |
|
|
for i, addr in enumerate(result['addresses'][:3]): |
|
|
print(f" {i+1}. {addr['formatted_address']}") |
|
|
else: |
|
|
print(f"Reverse geocoding failed: {result['error']}") |
|
|
|
|
|
print("\n" + "="*50 + "\n") |
|
|
|
|
|
|
|
|
print("3. Places Search - Find Restaurants") |
|
|
places_search_tool = gmaps_toolkit.get_tool("places_search") |
|
|
result = places_search_tool( |
|
|
query="restaurants near Mountain View, CA", |
|
|
location=f"{lat},{lng}", |
|
|
radius=2000 |
|
|
) |
|
|
|
|
|
if result["success"]: |
|
|
print(f"Found {result['places_found']} restaurants") |
|
|
for i, place in enumerate(result['places'][:3]): |
|
|
print(f" {i+1}. {place['name']}") |
|
|
print(f" Address: {place['formatted_address']}") |
|
|
print(f" Rating: {place.get('rating', 'N/A')}") |
|
|
print(f" Place ID: {place['place_id']}") |
|
|
|
|
|
|
|
|
if result['places']: |
|
|
sample_place_id = result['places'][0]['place_id'] |
|
|
else: |
|
|
print(f"Places search failed: {result['error']}") |
|
|
sample_place_id = None |
|
|
|
|
|
print("\n" + "="*50 + "\n") |
|
|
|
|
|
|
|
|
if sample_place_id: |
|
|
print("4. Place Details - Restaurant Information") |
|
|
place_details_tool = gmaps_toolkit.get_tool("place_details") |
|
|
result = place_details_tool(place_id=sample_place_id) |
|
|
|
|
|
if result["success"]: |
|
|
print(f"Name: {result['name']}") |
|
|
print(f"Address: {result['formatted_address']}") |
|
|
print(f"Phone: {result.get('phone_number', 'N/A')}") |
|
|
print(f"Website: {result.get('website', 'N/A')}") |
|
|
print(f"Rating: {result.get('rating', 'N/A')} ({result.get('user_ratings_total', 0)} reviews)") |
|
|
print(f"Price Level: {result.get('price_level', 'N/A')}") |
|
|
else: |
|
|
print(f"Place details failed: {result['error']}") |
|
|
|
|
|
print("\n" + "="*50 + "\n") |
|
|
|
|
|
|
|
|
print("5. Directions - Driving Route") |
|
|
directions_tool = gmaps_toolkit.get_tool("directions") |
|
|
result = directions_tool( |
|
|
origin="San Francisco, CA", |
|
|
destination="Mountain View, CA", |
|
|
mode="driving" |
|
|
) |
|
|
|
|
|
if result["success"] and result['routes']: |
|
|
route = result['routes'][0] |
|
|
print(f"Route from {result['origin']} to {result['destination']}") |
|
|
print(f"Distance: {route['total_distance_meters']} meters") |
|
|
print(f"Duration: {route['total_duration_seconds']} seconds") |
|
|
print(f"Summary: {route.get('summary', 'N/A')}") |
|
|
|
|
|
|
|
|
if route['legs'] and route['legs'][0]['steps']: |
|
|
print("First 3 steps:") |
|
|
for i, step in enumerate(route['legs'][0]['steps'][:3]): |
|
|
|
|
|
instructions = step['instructions'].replace('<b>', '').replace('</b>', '').replace('<div>', ' ').replace('</div>', '') |
|
|
print(f" {i+1}. {instructions}") |
|
|
else: |
|
|
print(f"Directions failed: {result['error']}") |
|
|
|
|
|
print("\n" + "="*50 + "\n") |
|
|
|
|
|
|
|
|
print("6. Distance Matrix - Multiple Origins/Destinations") |
|
|
distance_matrix_tool = gmaps_toolkit.get_tool("distance_matrix") |
|
|
result = distance_matrix_tool( |
|
|
origins="San Francisco,CA|Oakland,CA", |
|
|
destinations="Mountain View,CA|Palo Alto,CA", |
|
|
mode="driving", |
|
|
units="imperial" |
|
|
) |
|
|
|
|
|
if result["success"]: |
|
|
print("Distance Matrix Results:") |
|
|
for origin_data in result['matrix']: |
|
|
print(f"\nFrom: {origin_data['origin_address']}") |
|
|
for dest in origin_data['destinations']: |
|
|
if dest['status'] == 'OK': |
|
|
print(f" To {dest['destination_address']}: {dest['distance'].get('text', 'N/A')} - {dest['duration'].get('text', 'N/A')}") |
|
|
else: |
|
|
print(f" To {dest['destination_address']}: {dest['status']}") |
|
|
else: |
|
|
print(f"Distance matrix failed: {result['error']}") |
|
|
|
|
|
print("\n" + "="*50 + "\n") |
|
|
|
|
|
|
|
|
print("7. Time Zone Information") |
|
|
timezone_tool = gmaps_toolkit.get_tool("timezone") |
|
|
result = timezone_tool(latitude=lat, longitude=lng) |
|
|
|
|
|
if result["success"]: |
|
|
print(f"Location: {result['latitude']}, {result['longitude']}") |
|
|
print(f"Time Zone: {result['time_zone_name']} ({result['time_zone_id']})") |
|
|
print(f"UTC Offset: {result['raw_offset']} seconds") |
|
|
print(f"DST Offset: {result['dst_offset']} seconds") |
|
|
else: |
|
|
print(f"Time zone lookup failed: {result['error']}") |
|
|
|
|
|
print("\n=== Demo Complete ===") |
|
|
|
|
|
if __name__ == "__main__": |
|
|
main() |