diff --git a/homeassistant/components/proximity/coordinator.py b/homeassistant/components/proximity/coordinator.py
index 055c15125f16405a5882ccaf182ee064e3cd6722..856138c9051edf8b9b07e3ac1dbd13159e7803e2 100644
--- a/homeassistant/components/proximity/coordinator.py
+++ b/homeassistant/components/proximity/coordinator.py
@@ -164,7 +164,7 @@ class ProximityDataUpdateCoordinator(DataUpdateCoordinator[ProximityData]):
             )
             return None
 
-        distance_to_zone = distance(
+        distance_to_centre = distance(
             zone.attributes[ATTR_LATITUDE],
             zone.attributes[ATTR_LONGITUDE],
             latitude,
@@ -172,8 +172,13 @@ class ProximityDataUpdateCoordinator(DataUpdateCoordinator[ProximityData]):
         )
 
         # it is ensured, that distance can't be None, since zones must have lat/lon coordinates
-        assert distance_to_zone is not None
-        return round(distance_to_zone)
+        assert distance_to_centre is not None
+
+        zone_radius: float = zone.attributes["radius"]
+        if zone_radius > distance_to_centre:
+            # we've arrived the zone
+            return 0
+        return round(distance_to_centre - zone_radius)
 
     def _calc_direction_of_travel(
         self,
diff --git a/tests/components/proximity/snapshots/test_diagnostics.ambr b/tests/components/proximity/snapshots/test_diagnostics.ambr
index 42ec74710f968bbfb1c2a83b09d5990e294ee38a..f6cd439351146bc34767a59d3b75306fee6ba048 100644
--- a/tests/components/proximity/snapshots/test_diagnostics.ambr
+++ b/tests/components/proximity/snapshots/test_diagnostics.ambr
@@ -5,19 +5,19 @@
       'entities': dict({
         'device_tracker.test1': dict({
           'dir_of_travel': None,
-          'dist_to_zone': 2218752,
+          'dist_to_zone': 2218742,
           'is_in_ignored_zone': False,
           'name': 'test1',
         }),
         'device_tracker.test2': dict({
           'dir_of_travel': None,
-          'dist_to_zone': 4077309,
+          'dist_to_zone': 4077299,
           'is_in_ignored_zone': False,
           'name': 'test2',
         }),
         'device_tracker.test3': dict({
           'dir_of_travel': None,
-          'dist_to_zone': 4077309,
+          'dist_to_zone': 4077299,
           'is_in_ignored_zone': False,
           'name': 'test3',
         }),
@@ -42,7 +42,7 @@
       }),
       'proximity': dict({
         'dir_of_travel': None,
-        'dist_to_zone': 2218752,
+        'dist_to_zone': 2218742,
         'nearest': 'test1',
       }),
       'tracked_states': dict({
diff --git a/tests/components/proximity/test_init.py b/tests/components/proximity/test_init.py
index 22a546e6abe0ba6519e7d08a7557f5e034000ad3..e93400142077b5bc1da7522bf770e55e3587c7f4 100644
--- a/tests/components/proximity/test_init.py
+++ b/tests/components/proximity/test_init.py
@@ -128,7 +128,7 @@ async def test_device_tracker_test1_away(hass: HomeAssistant) -> None:
 
     entity_base_name = "sensor.home_test1"
     state = hass.states.get(f"{entity_base_name}_distance")
-    assert state.state == "2218752"
+    assert state.state == "2218742"
     state = hass.states.get(f"{entity_base_name}_direction_of_travel")
     assert state.state == STATE_UNKNOWN
 
@@ -152,7 +152,7 @@ async def test_device_tracker_test1_awayfurther(
 
     entity_base_name = "sensor.home_test1"
     state = hass.states.get(f"{entity_base_name}_distance")
-    assert state.state == "2218752"
+    assert state.state == "2218742"
     state = hass.states.get(f"{entity_base_name}_direction_of_travel")
     assert state.state == STATE_UNKNOWN
 
@@ -169,7 +169,7 @@ async def test_device_tracker_test1_awayfurther(
 
     entity_base_name = "sensor.home_test1"
     state = hass.states.get(f"{entity_base_name}_distance")
-    assert state.state == "4625264"
+    assert state.state == "4625254"
     state = hass.states.get(f"{entity_base_name}_direction_of_travel")
     assert state.state == "away_from"
 
@@ -193,7 +193,7 @@ async def test_device_tracker_test1_awaycloser(
 
     entity_base_name = "sensor.home_test1"
     state = hass.states.get(f"{entity_base_name}_distance")
-    assert state.state == "4625264"
+    assert state.state == "4625254"
     state = hass.states.get(f"{entity_base_name}_direction_of_travel")
     assert state.state == STATE_UNKNOWN
 
@@ -210,7 +210,7 @@ async def test_device_tracker_test1_awaycloser(
 
     entity_base_name = "sensor.home_test1"
     state = hass.states.get(f"{entity_base_name}_distance")
-    assert state.state == "2218752"
+    assert state.state == "2218742"
     state = hass.states.get(f"{entity_base_name}_direction_of_travel")
     assert state.state == "towards"
 
@@ -272,7 +272,7 @@ async def test_device_tracker_test1_awayfurther_a_bit(hass: HomeAssistant) -> No
 
     entity_base_name = "sensor.home_test1"
     state = hass.states.get(f"{entity_base_name}_distance")
-    assert state.state == "2218752"
+    assert state.state == "2218742"
     state = hass.states.get(f"{entity_base_name}_direction_of_travel")
     assert state.state == STATE_UNKNOWN
 
@@ -289,7 +289,7 @@ async def test_device_tracker_test1_awayfurther_a_bit(hass: HomeAssistant) -> No
 
     entity_base_name = "sensor.home_test1"
     state = hass.states.get(f"{entity_base_name}_distance")
-    assert state.state == "2218752"
+    assert state.state == "2218742"
     state = hass.states.get(f"{entity_base_name}_direction_of_travel")
     assert state.state == "stationary"
 
@@ -360,7 +360,7 @@ async def test_device_tracker_test1_awayfurther_than_test2_first_test1(
 
     entity_base_name = "sensor.home_test1"
     state = hass.states.get(f"{entity_base_name}_distance")
-    assert state.state == "2218752"
+    assert state.state == "2218742"
     state = hass.states.get(f"{entity_base_name}_direction_of_travel")
     assert state.state == STATE_UNKNOWN
 
@@ -383,13 +383,13 @@ async def test_device_tracker_test1_awayfurther_than_test2_first_test1(
 
     entity_base_name = "sensor.home_test1"
     state = hass.states.get(f"{entity_base_name}_distance")
-    assert state.state == "2218752"
+    assert state.state == "2218742"
     state = hass.states.get(f"{entity_base_name}_direction_of_travel")
     assert state.state == STATE_UNKNOWN
 
     entity_base_name = "sensor.home_test2"
     state = hass.states.get(f"{entity_base_name}_distance")
-    assert state.state == "4625264"
+    assert state.state == "4625254"
     state = hass.states.get(f"{entity_base_name}_direction_of_travel")
     assert state.state == STATE_UNKNOWN
 
@@ -432,7 +432,7 @@ async def test_device_tracker_test1_awayfurther_than_test2_first_test2(
 
     entity_base_name = "sensor.home_test2"
     state = hass.states.get(f"{entity_base_name}_distance")
-    assert state.state == "4625264"
+    assert state.state == "4625254"
     state = hass.states.get(f"{entity_base_name}_direction_of_travel")
     assert state.state == STATE_UNKNOWN
 
@@ -449,13 +449,13 @@ async def test_device_tracker_test1_awayfurther_than_test2_first_test2(
 
     entity_base_name = "sensor.home_test1"
     state = hass.states.get(f"{entity_base_name}_distance")
-    assert state.state == "2218752"
+    assert state.state == "2218742"
     state = hass.states.get(f"{entity_base_name}_direction_of_travel")
     assert state.state == STATE_UNKNOWN
 
     entity_base_name = "sensor.home_test2"
     state = hass.states.get(f"{entity_base_name}_distance")
-    assert state.state == "4625264"
+    assert state.state == "4625254"
     state = hass.states.get(f"{entity_base_name}_direction_of_travel")
     assert state.state == STATE_UNKNOWN
 
@@ -489,7 +489,7 @@ async def test_device_tracker_test1_awayfurther_test2_in_ignored_zone(
 
     entity_base_name = "sensor.home_test1"
     state = hass.states.get(f"{entity_base_name}_distance")
-    assert state.state == "2218752"
+    assert state.state == "2218742"
     state = hass.states.get(f"{entity_base_name}_direction_of_travel")
     assert state.state == STATE_UNKNOWN
 
@@ -562,7 +562,7 @@ async def test_device_tracker_test1_awayfurther_test2_first(
 
     entity_base_name = "sensor.home_test2"
     state = hass.states.get(f"{entity_base_name}_distance")
-    assert state.state == "2218752"
+    assert state.state == "2218742"
     state = hass.states.get(f"{entity_base_name}_direction_of_travel")
     assert state.state == STATE_UNKNOWN
 
@@ -602,7 +602,7 @@ async def test_device_tracker_test1_nearest_after_test2_in_ignored_zone(
 
     entity_base_name = "sensor.home_test1"
     state = hass.states.get(f"{entity_base_name}_distance")
-    assert state.state == "2218752"
+    assert state.state == "2218742"
     state = hass.states.get(f"{entity_base_name}_direction_of_travel")
     assert state.state == STATE_UNKNOWN
 
@@ -625,13 +625,13 @@ async def test_device_tracker_test1_nearest_after_test2_in_ignored_zone(
 
     entity_base_name = "sensor.home_test1"
     state = hass.states.get(f"{entity_base_name}_distance")
-    assert state.state == "2218752"
+    assert state.state == "2218742"
     state = hass.states.get(f"{entity_base_name}_direction_of_travel")
     assert state.state == STATE_UNKNOWN
 
     entity_base_name = "sensor.home_test2"
     state = hass.states.get(f"{entity_base_name}_distance")
-    assert state.state == "989156"
+    assert state.state == "989146"
     state = hass.states.get(f"{entity_base_name}_direction_of_travel")
     assert state.state == STATE_UNKNOWN
 
@@ -648,13 +648,13 @@ async def test_device_tracker_test1_nearest_after_test2_in_ignored_zone(
 
     entity_base_name = "sensor.home_test1"
     state = hass.states.get(f"{entity_base_name}_distance")
-    assert state.state == "2218752"
+    assert state.state == "2218742"
     state = hass.states.get(f"{entity_base_name}_direction_of_travel")
     assert state.state == STATE_UNKNOWN
 
     entity_base_name = "sensor.home_test2"
     state = hass.states.get(f"{entity_base_name}_distance")
-    assert state.state == "1364567"
+    assert state.state == "1364557"
     state = hass.states.get(f"{entity_base_name}_direction_of_travel")
     assert state.state == "away_from"
 
@@ -693,15 +693,15 @@ async def test_nearest_sensors(hass: HomeAssistant, config_zones) -> None:
     state = hass.states.get("sensor.home_nearest_device")
     assert state.state == "test1"
     state = hass.states.get("sensor.home_nearest_distance")
-    assert state.state == "1615590"
+    assert state.state == "1615580"
     state = hass.states.get("sensor.home_test1_direction_of_travel")
     assert state.state == "towards"
     state = hass.states.get("sensor.home_test1_distance")
-    assert state.state == "1615590"
+    assert state.state == "1615580"
     state = hass.states.get("sensor.home_test1_direction_of_travel")
     assert state.state == "towards"
     state = hass.states.get("sensor.home_test2_distance")
-    assert state.state == "5176058"
+    assert state.state == "5176048"
     state = hass.states.get("sensor.home_test2_direction_of_travel")
     assert state.state == "away_from"
 
@@ -715,15 +715,15 @@ async def test_nearest_sensors(hass: HomeAssistant, config_zones) -> None:
     state = hass.states.get("sensor.home_nearest_device")
     assert state.state == "test1"
     state = hass.states.get("sensor.home_nearest_distance")
-    assert state.state == "1615590"
+    assert state.state == "1615580"
     state = hass.states.get("sensor.home_nearest_direction_of_travel")
     assert state.state == "towards"
     state = hass.states.get("sensor.home_test1_distance")
-    assert state.state == "1615590"
+    assert state.state == "1615580"
     state = hass.states.get("sensor.home_test1_direction_of_travel")
     assert state.state == "towards"
     state = hass.states.get("sensor.home_test2_distance")
-    assert state.state == "4611404"
+    assert state.state == "4611394"
     state = hass.states.get("sensor.home_test2_direction_of_travel")
     assert state.state == "towards"
 
@@ -737,15 +737,15 @@ async def test_nearest_sensors(hass: HomeAssistant, config_zones) -> None:
     state = hass.states.get("sensor.home_nearest_device")
     assert state.state == "test1"
     state = hass.states.get("sensor.home_nearest_distance")
-    assert state.state == "2204122"
+    assert state.state == "2204112"
     state = hass.states.get("sensor.home_nearest_direction_of_travel")
     assert state.state == "away_from"
     state = hass.states.get("sensor.home_test1_distance")
-    assert state.state == "2204122"
+    assert state.state == "2204112"
     state = hass.states.get("sensor.home_test1_direction_of_travel")
     assert state.state == "away_from"
     state = hass.states.get("sensor.home_test2_distance")
-    assert state.state == "4611404"
+    assert state.state == "4611394"
     state = hass.states.get("sensor.home_test2_direction_of_travel")
     assert state.state == "towards"
 
@@ -919,3 +919,95 @@ async def test_tracked_zone_is_removed(hass: HomeAssistant) -> None:
     assert state.state == STATE_UNAVAILABLE
     state = hass.states.get(f"{entity_base_name}_direction_of_travel")
     assert state.state == STATE_UNAVAILABLE
+
+
+async def test_tracked_zone_radius_is_changed(hass: HomeAssistant) -> None:
+    """Test that radius of the tracked zone is changed."""
+    entry = await async_setup_single_entry(
+        hass, "zone.home", ["device_tracker.test1"], [], 1
+    )
+
+    hass.states.async_set(
+        "device_tracker.test1",
+        "not_home",
+        {"friendly_name": "test1", "latitude": 20.10000001, "longitude": 10.1},
+    )
+    await hass.async_block_till_done()
+
+    # check sensor entities before radius change
+    state = hass.states.get("sensor.home_nearest_device")
+    assert state.state == "test1"
+
+    entity_base_name = "sensor.home_test1"
+    state = hass.states.get(f"{entity_base_name}_distance")
+    assert state.state == "2218742"
+    state = hass.states.get(f"{entity_base_name}_direction_of_travel")
+    assert state.state == STATE_UNKNOWN
+
+    # change radius of tracked zone
+    hass.states.async_set(
+        "zone.home",
+        "zoning",
+        {"name": "Home", "latitude": 2.1, "longitude": 1.1, "radius": 110},
+    )
+    await hass.config_entries.async_reload(entry.entry_id)
+    await hass.async_block_till_done()
+    radius = hass.states.get("zone.home").attributes["radius"]
+    assert radius == 110
+
+    # check sensor entities after radius change
+    state = hass.states.get("sensor.home_nearest_device")
+    assert state.state == "test1"
+
+    entity_base_name = "sensor.home_test1"
+    state = hass.states.get(f"{entity_base_name}_distance")
+    assert state.state == "2218642"
+    state = hass.states.get(f"{entity_base_name}_direction_of_travel")
+    assert state.state == STATE_UNKNOWN
+
+
+async def test_tracked_zone_location_is_changed(hass: HomeAssistant) -> None:
+    """Test that gps location of the tracked zone is changed."""
+    entry = await async_setup_single_entry(
+        hass, "zone.home", ["device_tracker.test1"], [], 1
+    )
+
+    hass.states.async_set(
+        "device_tracker.test1",
+        "not_home",
+        {"friendly_name": "test1", "latitude": 20.1, "longitude": 10.1},
+    )
+    await hass.async_block_till_done()
+
+    # check sensor entities before location change
+    state = hass.states.get("sensor.home_nearest_device")
+    assert state.state == "test1"
+
+    entity_base_name = "sensor.home_test1"
+    state = hass.states.get(f"{entity_base_name}_distance")
+    assert state.state == "2218742"
+    state = hass.states.get(f"{entity_base_name}_direction_of_travel")
+    assert state.state == STATE_UNKNOWN
+
+    # change location of tracked zone
+    hass.states.async_set(
+        "zone.home",
+        "zoning",
+        {"name": "Home", "latitude": 10, "longitude": 5, "radius": 10},
+    )
+    await hass.config_entries.async_reload(entry.entry_id)
+    await hass.async_block_till_done()
+    latitude = hass.states.get("zone.home").attributes["latitude"]
+    assert latitude == 10
+    longitude = hass.states.get("zone.home").attributes["longitude"]
+    assert longitude == 5
+
+    # check sensor entities after location change
+    state = hass.states.get("sensor.home_nearest_device")
+    assert state.state == "test1"
+
+    entity_base_name = "sensor.home_test1"
+    state = hass.states.get(f"{entity_base_name}_distance")
+    assert state.state == "1244478"
+    state = hass.states.get(f"{entity_base_name}_direction_of_travel")
+    assert state.state == STATE_UNKNOWN