Bird
Raised Fist0
Drone Programmingprogramming~30 mins

Setting geofence boundaries in Drone Programming - Mini Project: Build & Apply

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Setting Geofence Boundaries
📖 Scenario: You are programming a drone to fly safely within a specific area. To keep the drone from flying too far, you need to set up geofence boundaries. These boundaries tell the drone where it can and cannot go.
🎯 Goal: Build a program that defines a geofence area using coordinates, sets a maximum allowed distance from the center, checks if a given drone position is inside the geofence, and prints the result.
📋 What You'll Learn
Create a dictionary called geofence_center with keys 'latitude' and 'longitude' and exact values 37.7749 and -122.4194
Create a variable called max_distance_km and set it to 5
Write a function called is_inside_geofence that takes lat and lon and returns true if the distance from geofence_center is less than or equal to max_distance_km, otherwise false
Print the result of is_inside_geofence(37.7790, -122.4183)
💡 Why This Matters
🌍 Real World
Drones need geofence boundaries to avoid flying into restricted or dangerous areas, ensuring safety and compliance with regulations.
💼 Career
Understanding how to set and check geofence boundaries is important for drone software developers, UAV operators, and anyone working with autonomous flying devices.
Progress0 / 4 steps
1
Create the geofence center coordinates
Create a dictionary called geofence_center with the keys 'latitude' set to 37.7749 and 'longitude' set to -122.4194.
Drone Programming
Hint

Use curly braces {} to create a dictionary with the exact keys and values.

2
Set the maximum allowed distance
Create a variable called max_distance_km and set it to the number 5.
Drone Programming
Hint

Just assign the number 5 to the variable max_distance_km.

3
Write the function to check if inside geofence
Write a function called is_inside_geofence that takes two parameters: lat and lon. Inside the function, calculate the distance from geofence_center using the formula for distance between two points on Earth (use a simple approximation: 1 degree latitude or longitude equals 111 km). Return true if the distance is less than or equal to max_distance_km, otherwise return false.
Drone Programming
Hint

Calculate the difference in latitude and longitude, convert to kilometers by multiplying by 111, then use the Pythagorean theorem to find the distance.

4
Print the geofence check result
Print the result of calling is_inside_geofence(37.7790, -122.4183).
Drone Programming
Hint

Use print() to show the result of the function call.

Practice

(1/5)
1.

What is the main purpose of setting geofence boundaries for a drone?

easy
A. To improve the drone's camera quality
B. To increase the drone's speed
C. To keep the drone flying within a safe area
D. To reduce the drone's battery usage

Solution

  1. Step 1: Understand geofence boundaries

    Geofence boundaries define a virtual area where the drone is allowed to fly.
  2. Step 2: Identify the purpose of geofencing

    The main goal is to keep the drone safe by preventing it from flying outside this area.
  3. Final Answer:

    To keep the drone flying within a safe area -> Option C
  4. Quick Check:

    Geofence = safe flying area [OK]
Hint: Geofence means safe zone for drone flight [OK]
Common Mistakes:
  • Confusing geofence with speed control
  • Thinking geofence improves camera
  • Assuming geofence saves battery
2.

Which of the following is the correct way to define a geofence boundary in code using minimum and maximum latitude and longitude?

geofence = {
    'min_lat': 34.0,
    'max_lat': 35.0,
    'min_lon': -118.5,
    'max_lon': -117.5
}
easy
A. geofence = [34.0, 35.0, -118.5, -117.5]
B. geofence = '34.0,35.0,-118.5,-117.5'
C. geofence = (min_lat=34.0, max_lat=35.0, min_lon=-118.5, max_lon=-117.5)
D. geofence = {'min_lat': 34.0, 'max_lat': 35.0, 'min_lon': -118.5, 'max_lon': -117.5}

Solution

  1. Step 1: Identify correct data structure for geofence

    A dictionary with keys for min and max latitude and longitude is clear and correct.
  2. Step 2: Check syntax correctness

    geofence = {'min_lat': 34.0, 'max_lat': 35.0, 'min_lon': -118.5, 'max_lon': -117.5} uses a dictionary with proper key-value pairs and correct syntax.
  3. Final Answer:

    geofence = {'min_lat': 34.0, 'max_lat': 35.0, 'min_lon': -118.5, 'max_lon': -117.5} -> Option D
  4. Quick Check:

    Dictionary with keys = geofence = {'min_lat': 34.0, 'max_lat': 35.0, 'min_lon': -118.5, 'max_lon': -117.5} [OK]
Hint: Use dictionary with descriptive keys for boundaries [OK]
Common Mistakes:
  • Using list or tuple without keys
  • Using string instead of structured data
  • Incorrect syntax for tuples
3.

Given the following code snippet, what will be the output?

geofence = {'min_lat': 10.0, 'max_lat': 20.0, 'min_lon': 30.0, 'max_lon': 40.0}

current_position = {'lat': 15.0, 'lon': 35.0}

inside = (geofence['min_lat'] <= current_position['lat'] <= geofence['max_lat']) and \
         (geofence['min_lon'] <= current_position['lon'] <= geofence['max_lon'])

print(inside)
medium
A. False
B. True
C. SyntaxError
D. None

Solution

  1. Step 1: Check latitude condition

    15.0 is between 10.0 and 20.0, so latitude condition is True.
  2. Step 2: Check longitude condition

    35.0 is between 30.0 and 40.0, so longitude condition is True.
  3. Step 3: Combine conditions

    Both conditions are True, so inside is True.
  4. Final Answer:

    True -> Option B
  5. Quick Check:

    Position inside geofence = True [OK]
Hint: Check if lat and lon are within min and max [OK]
Common Mistakes:
  • Mixing up latitude and longitude
  • Using wrong comparison operators
  • Forgetting to combine both conditions
4.

Identify the error in the following geofence check code and select the fix:

geofence = {'min_lat': 5.0, 'max_lat': 15.0, 'min_lon': 25.0, 'max_lon': 35.0}

current_position = {'lat': 10.0, 'lon': 40.0}

if geofence['min_lat'] <= current_position['lat'] <= geofence['max_lat'] and 
   geofence['min_lon'] <= current_position['lon'] <= geofence['max_lon']:
    print("Inside geofence")
else:
    print("Outside geofence")
medium
A. Add parentheses around the if condition
B. Replace 'and' with 'or' in the if condition
C. Swap min_lon and max_lon values in geofence
D. Change current_position['lon'] to 30.0 to be inside geofence

Solution

  1. Step 1: Identify the syntax error

    The if condition is split across lines without parentheses or backslash, causing SyntaxError.
  2. Step 2: Understand the required fix

    Parentheses around the condition allow multi-line expressions.
  3. Step 3: Confirm logic after fix

    With syntax fixed, lat inside but lon 40.0 > 35.0 outside, prints correctly "Outside geofence".
  4. Final Answer:

    Add parentheses around the if condition -> Option A
  5. Quick Check:

    if (cond1 and cond2): syntax OK [OK]
Hint: Wrap multi-line if conditions in parentheses [OK]
Common Mistakes:
  • Using 'or' instead of 'and' in condition
  • Swapping min and max values incorrectly
  • Changing data instead of fixing syntax
5.

You want to create a geofence that excludes a small no-fly zone inside a larger allowed area. Which approach correctly sets this using nested geofence boundaries?

# Outer geofence
outer = {'min_lat': 10.0, 'max_lat': 20.0, 'min_lon': 30.0, 'max_lon': 40.0}

# Inner no-fly zone
no_fly = {'min_lat': 14.0, 'max_lat': 16.0, 'min_lon': 34.0, 'max_lon': 36.0}

# Function to check if position is inside a geofence

Which code snippet correctly returns True only if the position is inside the outer geofence but outside the no-fly zone?

hard
A. return (outer['min_lat'] <= lat <= outer['max_lat'] and outer['min_lon'] <= lon <= outer['max_lon']) and not (no_fly['min_lat'] <= lat <= no_fly['max_lat'] and no_fly['min_lon'] <= lon <= no_fly['max_lon'])
B. return (outer['min_lat'] <= lat <= outer['max_lat'] and outer['min_lon'] <= lon <= outer['max_lon']) or (no_fly['min_lat'] <= lat <= no_fly['max_lat'] and no_fly['min_lon'] <= lon <= no_fly['max_lon'])
C. return not (outer['min_lat'] <= lat <= outer['max_lat'] and outer['min_lon'] <= lon <= outer['max_lon']) and (no_fly['min_lat'] <= lat <= no_fly['max_lat'] and no_fly['min_lon'] <= lon <= no_fly['max_lon'])
D. return (outer['min_lat'] >= lat >= outer['max_lat'] and outer['min_lon'] >= lon >= outer['max_lon']) and not (no_fly['min_lat'] >= lat >= no_fly['max_lat'] and no_fly['min_lon'] >= lon >= no_fly['max_lon'])

Solution

  1. Step 1: Check position inside outer geofence

    Use conditions to confirm latitude and longitude are within outer boundaries.
  2. Step 2: Exclude position inside no-fly zone

    Use 'not' to ensure position is outside the inner no-fly zone boundaries.
  3. Step 3: Combine conditions correctly

    Use 'and' to require both conditions: inside outer and outside no-fly zone.
  4. Final Answer:

    return (outer['min_lat'] <= lat <= outer['max_lat'] and outer['min_lon'] <= lon <= outer['max_lon']) and not (no_fly['min_lat'] <= lat <= no_fly['max_lat'] and no_fly['min_lon'] <= lon <= no_fly['max_lon']) -> Option A
  5. Quick Check:

    Inside outer and outside inner = return (outer['min_lat'] <= lat <= outer['max_lat'] and outer['min_lon'] <= lon <= outer['max_lon']) and not (no_fly['min_lat'] <= lat <= no_fly['max_lat'] and no_fly['min_lon'] <= lon <= no_fly['max_lon']) [OK]
Hint: Use 'and' with 'not' to exclude inner no-fly zone [OK]
Common Mistakes:
  • Using 'or' instead of 'and' to combine conditions
  • Incorrect comparison operators (>= instead of <=)
  • Not excluding the no-fly zone properly