### Godot version

v4.0.beta11.official [91713ced8]

### System information

MX Linux 21

### Issue description

In Godot 3, TileMap had methods get_used_cells() and get_used_cells_by_id(). Godot 4's TileMap only has get_used_cells() and is missing get_used_cells_by_id().

get_used_cells_by_id() is highly useful in multiple cases, for example when trying to get all cells that are of road type, to randomly spawn a car.

Re-implementing get_used_cells_by_id() should be simple. The method could simply call get_used_cells(), and ignore all cells that are of the wrong ID.

### Steps to reproduce

N/A

### Minimal reproduction project

N/A
ERR_FAIL_COND_V_MSG(!bodies_coords.has(p_physics_body), Vector2i(), vformat("No tiles for the given body RID %d.", p_physics_body));
	return bodies_coords[p_physics_body];
}
void TileMap::fix_invalid_tiles() {
	ERR_FAIL_COND_MSG(tile_set.is_null(), "Cannot fix invalid tiles if Tileset is not open.");
	for (unsigned int i = 0; i < layers.size(); i++) {
		const HashMap<Vector2i, TileMapCell> &tile_map = layers[i].tile_map;
		RBSet<Vector2i> coords;
		for (const KeyValue<Vector2i, TileMapCell> &E : tile_map) {
			TileSetSource *source = *tile_set->get_source(E.value.source_id);
			if (!source || !source->has_tile(E.value.get_atlas_coords()) || !source->has_alternative_tile(E.value.get_atlas_coords(), E.value.alternative_tile)) {
				coords.insert(E.key);
			}
		}
		for (const Vector2i &E : coords) {
			set_cell(i, E, TileSet::INVALID_SOURCE, TileSetSource::INVALID_ATLAS_COORDS, TileSetSource::INVALID_TILE_ALTERNATIVE);
		}
	}
}
void TileMap::clear_layer(int p_layer) {
	ERR_FAIL_INDEX(p_layer, (int)layers.size());
	
	_clear_layer_internals(p_layer);
	layers[p_layer].tile_map.clear();
	_recreate_layer_internals(p_layer);
	used_rect_cache_dirty = true;
}
void TileMap::clear() {